Linq-to-entity: Как создавать объекты (новый Xyz () или CreateXyz ())? - PullRequest
3 голосов
/ 08 февраля 2009

Каков наилучший способ добавления нового объекта в платформу сущностей. Дизайнер добавляет все эти методы создания, но для меня более логично вызывать new для объекта. Сгенерированный метод CreateCustomer, например можно назвать так:

Customer c = context.CreateCustomer(System.Guid.NewGuid(), "Name"));
context.AddToCustomer(c);

где мне было бы разумнее сделать:

Customer c = new Customer {
    Id = System.Guid.NewGuid(),
    Name = "Name"
};
context.AddToCustomer(c);

Последнее гораздо более явное, поскольку свойства, которые устанавливаются при построении, имеют имена. Я предполагаю, что дизайнер добавляет методы создания специально. Почему я должен использовать их?

Ответы [ 3 ]

5 голосов
/ 09 февраля 2009

Как говорит Эндрю (с положительным голосом), вполне допустимо использовать обычные конструкторы. Что касается того, почему существуют методы «Create», я полагаю , что цель состоит в том, чтобы явно указать, какие свойства требуются. Если вы используете такие методы, вы можете быть уверены, что не забыли установить какое-либо свойство, которое вызовет исключение при сохранении изменений. Однако генератор кода для Entity Framework не совсем понимает это правильно; он также включает сгенерированные сервером свойства автоинкремента. Они технически «обязательны», но вам не нужно указывать их.

2 голосов
/ 09 февраля 2009

Вы можете абсолютно использовать второй, более естественный способ. Я даже не уверен, почему вообще существует первый способ.

0 голосов
/ 09 февраля 2009

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

С уважением, Мариус С. (c_marius@msn.com)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...