среда, 24 марта 2010 г.

ASP.NET Dynamic Data: Custom Page Specialize Model And Action

ASP.NET Dynamic Data позволяет производить достаточно точную конфигурацию страниц и редакторов для полей редактируемой сущности. На сегодня в поставку входят контексты Linq2Sql и Entity Framework.
Я остановлюсь на небольшом уточнении в конфигурации шаблона страницы для редактирования выбранной таблицы по определенному действию. Переопределить шаблоны для всех действий по конкретной таблицы можно при помощи route регистрируемого при старте приложения в Global.asax:

routes.Add(new DynamicDataRoute("Products/{action}.aspx")
{
    Table = "Products",
    ViewName = "ProductList",
    Model = model
});
В DynamicDataRoute классе есть public свойство Action, на первый взгляд оно должно ограничивать определенный route по конкретному дейстию, но это не так и чтобы сделать такое ограничение надо по-прежнему использовать ограничения Constraints:
routes.Add(new DynamicDataRoute("Products/{action}.aspx")
{
    Table = "Products",
    ViewName = "ProductList",
    Model = model,
    Constraints = new RouteValueDictionary(new { action = PageAction.List }),
});

Комбинация таких выражений позволяет тонко настраивать отображаемые страницы для конкретных моделей таблиц, функциональность которых должна быть изменена, по отношению к стандартным шаблонам.
Собственные шаблоны страниц должны размещаться в папке с именем таблицы дочерней папке ~/DynamicData/CustomPages. Из примера выше это должен быть шаблон ~/DynamicData/CustomPages/Products/ProductList.aspx.
В следующих постах я расскажу о расширении ASP.NET Dynamic Data Filtering и возможности использования Dynamic Data Controls в обычном front-end приложении.

Ссылки по теме:
ASP.NET Dynamic Data
Dynamic Data Model Overview

четверг, 18 февраля 2010 г.

Сто лет Одиночества - Предсмертное письмо Габриэля Гарсии Маркеса (Завещание)

Аудио mp3 (6,724 KB)

Проси у Господа мудрости и силы...


Если бы на одно мгновение Бог забыл, что я всего лишь тряпичная марионетка, и подарил бы мне кусочек жизни, я бы тогда, наверно, не говорил всё, что думаю, но точно бы думал, что говорю. Я бы ценил вещи, не за то сколько они стоят, но за то, сколько они значат. Я бы спал меньше, больше бы мечтал, понимая, что каждую минуту когда мы закрываем глаза, мы теряем шестьдесят секунд света. Я бы шёл, пока все остальные стоят, не спал, пока другие спят. Я бы слушал, когда другие говорят, и как бы я наслаждался чудесным вкусом шоколадного мороженного.

Если бы Бог одарил меня ещё одним мгновением жизни, я бы одевался скромнее, валялся бы на солнце, подставив тёплым лучам не только моё тело, но и душу. Господь, если бы у меня было сердце, я бы написал всю свою ненависть ко льду и ждал пока выйдет солнце. Я бы нарисовал мечтой Ван Гога на звёздах поэму Бенедетти, и песня Серрат стала бы серенадой, которую я бы подарил Луне. Я бы полил слезами розы, чтобы почувствовать боль их шипов и алый поцелуй их лепестков...

Господь, если бы у меня ещё оставался кусочек жизни, я бы не провёл ни одного дня, не сказав людям, которых я люблю, что я их люблю. Я бы убедил каждого дорогого мне человека в моей любви и жил бы влюбленный в любовь. Я бы объяснил тем, которые заблуждаются, считая, что перестают влюбляться, когда стареют, не понимая, что стареют, когда перестают влюбляться!
Ребёнку я бы подарил крылья, но позволил ему самому научиться летать. Стариков я бы убедил в том, что смерть приходит не со старостью, но с забвением. Я столькому научился у вас, люди, я понял, что весь мир хочет жить в горах, не понимая, что настоящее счастье в том, как мы поднимаемся в гору.

Я понял, что с того момента, когда впервые новорожденный младенец сожмёт в своем маленьком кулачке палец отца, он его больше никогда его не отпустит. Я понял, что один человек имеет право смотреть на другого свысока только тогда, когда он помогает ему подняться. Есть столько вещей, которым я бы мог ещё научиться у вас, люди, но, на самом-то деле, они вряд ли пригодятся, потому что, когда меня положат в этот чемодан, я, к сожалению, уже буду мёртв. Всегда говори то, что чувствуешь, и делай, то что думаешь.

Если бы я знал, что сегодня я в последний раз вижу тебя спящей, я бы крепко обнял тебя и молился Богу, чтобы он сделал меня твоим ангелом-хранителем. Если бы я знал, что сегодня вижу в последний раз, как ты выходишь из дверей, я бы обнял, поцеловал бы тебя и позвал бы снова, чтобы дать тебе больше. Если бы я знал, что слышу твой голос в последний раз, я бы записал на плёнку всё, что ты скажешь, чтобы слушать это ещё и ещё, бесконечно. Если бы я знал, что это последние минуты, когда я вижу тебя, я бы сказал: Я люблю тебя и не предполагал, глупец, что ты это и так знаешь. Всегда есть завтра, и жизнь предоставляет нам ещё одну возможность, чтобы всё исправить, но если я ошибаюсь и сегодня это всё, что нам осталось, я бы хотел сказать тебе, как сильно я тебя люблю, и что никогда тебя не забуду. Ни юноша, ни старик не может быть уверен, что для него наступит завтра.

Сегодня, может быть, последний раз, когда ты видишь тех, кого любишь. Поэтому не жди чего-то, сделай это сегодня, так как если завтра не придёт никогда, ты будешь сожалеть о том дне, когда у тебя не нашлось времени для одной улыбки, одного объятия, одного поцелуя, и когда ты был слишком занят, чтобы выполнить последнее желание.

Поддерживай близких тебе людей, шепчи им на ухо, как они тебе нужны, люби их и обращайся с ними бережно, найди время для того, чтобы сказать: "мне жаль", "прости меня, пожалуйста" и "спасибо", и все те слова любви, которые ты знаешь. Никто не запомнит тебя за твои мысли.
Проси у Господа мудрости и силы, чтобы говорить о том, что чувствуешь. Покажи твоим друзьям, как они важны для тебя. Если ты не скажешь этого сегодня, завтра будет таким же как вчера. И если ты этого не сделаешь никогда, ничто не будет иметь значения. Воплоти свои мечты. Это мгновение пришло.


P.S. Понравилось и захотелось провести эксперимент, насколько можно подняться в поисковом рейтинге по тематике несвойственной для всего блога.

четверг, 4 февраля 2010 г.

Размышления о чем писать далее

Интересно, чтобы такого написать чтобы не противоречило интеллектуальной собственности компании, в которой я работаю. Напишу наверное о собеседованиях и интересных моментах связанных с их проведением.
Хмм, пришла мысль, а могу ли я указывать название компании в которой я работаю.
Просто недавно, в связи с тем что я написал пост в корпоративный блог компании, но перед этим опубликовал в своем блоге его вариант, но на русском языке, потом пришлось его удалить, по просьбе компании. Вышла странная путаница, с одной стороны я и компанию в чем-то понимаю, с другой, тут нет ничего противоречащего интеллектуальной собственности, написал разместил - другой язык, практически, перевод поста, мог бы разместить ссылку на корпоративный блог.
Вот многие geeks из, к примеру Microsoft или Yandex, пишут в свои блоги мысли и размышления о технологиях, которые используют в рабочее время и это только повышает авторитет фирмы. Компания сильна своими сотрудниками!
Принял 2 важных решения:
  1. Больше в корпоративный блог писать не буду, дабы не было никаких вопросов.
  2. Расскажу чуть позже, когда будет конкретная информация.

P.S. Интересно будет ли кто-то проверять удалил ли я пост из своего блога)))

среда, 13 января 2010 г.

Set connection limit for MS SQL Server using TSQL

Сегодня предлагаю небольшой TSQL скрипт для установки максимального числа одновременных клиентский соединений для MS SQL Server.

SELECT * FROM sys.configurations
where description like '%connection%'
ORDER BY name
GO

sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE
GO

exec sp_configure 'user connections', 0;
GO
RECONFIGURE WITH OVERRIDE
GO

SELECT @@MAX_CONNECTIONS
GO

sp_configure 'show advanced options', 0;
GO
RECONFIGURE WITH OVERRIDE
GO

После рестартовать SQL Server.

Используя SQL Server Management Studio:


  1. В обозревателе объектов щелкните правой кнопкой мыши на сервере и выберите Свойства.

  2. Выбрать закладку подключения.

  3. В соединениях, в поле Мах число одновременных подключений введите или выберите значение от 0 до 32767 для установки максимального количества пользователей, которым разрешено одновременное подключение к экземпляру SQL Server.

  4. Перезапустите SQL Server.

пятница, 8 января 2010 г.

MS Sql Server error with computed column

Здравствуйте, меня зовут Почепцов Вячеслав и сегодня я начну серию технических постов, связанных с различными аспектами разработки и способных помочь людям, которые столкнуться с подобными проблемами или размышлениями.
Сейчас я занимаюсь разработкой высоконагруженного сайта LiquidGeneration, написанного моей командой на ASP.NET MVC 1.0, IIS 7.0, Windows 2008, MS Sql Server 2005.
Сегодня рассмотрим простую ситуацию в MS Sql Server 2005, которая вызывает ошибку
Internal Query Processor Error: The query processor could not produce a query plan. For more information, contact Customer Support Services.
USE [master]
GO

-- SET ANSI_PADDING that preferred on Sql Server 2005+
SET ANSI_PADDING ON
GO

-- drop databse if it already exists
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'test')
DROP DATABASE [test]
GO

CREATE DATABASE [test];
GO

USE [test]
GO


CREATE TABLE [dbo].[CHILD](
[ID] [int] NOT NULL,
[SOME_FIELD] [nvarchar](40) NOT NULL
) ON [PRIMARY]
GO

-- create table with computed field. it's important!
CREATE TABLE [dbo].[PARENT](
[ID] [int] NOT NULL,
[NAME] [nvarchar](40) NOT NULL,
[COMPUTED_FIELD]  AS (replace([NAME],' ','_')) PERSISTED,
CONSTRAINT [PK_PARENT] PRIMARY KEY CLUSTERED ([ID] ASC))

--create foreign key constraint
ALTER TABLE [dbo].[CHILD]  ADD  CONSTRAINT [FK_PARENT_CHILD] FOREIGN KEY([ID])
REFERENCES [dbo].[PARENT] ([ID])
GO

-- insert some data into tables
-- to verify that insert operation works well
INSERT PARENT
SELECT 1, 'bill'
UNION ALL
SELECT 2, 'john'
UNION ALL
SELECT 3, 'jett'

INSERT CHILD
SELECT 1, 'test1'
UNION ALL
SELECT 2, 'test2'
UNION ALL
SELECT 3, 'test3'
GO

-- create stored procedure that perform the same insert that previous sql command
-- it use child table that has foreign key to parent table with computed field
CREATE PROCEDURE [dbo].[sp_InsertIntoChild]
AS
BEGIN
INSERT CHILD
SELECT 3, 'test4'
END
GO

-- set padding off - it's default settings for connections from DB-Library applications
SET ANSI_PADDING OFF
GO

-- run stored procedure
EXEC    [dbo].[sp_InsertIntoChild]

SELECT * FROM [CHILD]

Исправить проблему можно достаточно просто установив SET ANSI_PADDING ON, но при вызове из приложения при создании соединения установить это невозможно.

Ошибка обрабатывается специалистами Microsoft, обещали исправить.

Sql cкипрт