2013-12-15 7 views
1

Итак, я новичок в рамках сущности ...Entity Framework 5, несколько моделей, Same Entity

У меня есть существующую базу данных SQL с некоторыми 500 таблиц в нем, и мы находимся в процессе рассмотрения перейдите из Linq-> SQL в Entity Framework в качестве нашего основного уровня доступа к данным. Мы также хотим рассмотреть больше подхода, ориентированного на домен, с отдельными контекстами данных, управляющими ключевыми областями приложения (т. Е. Продажами, маркетингом, работами, доставкой и т. Д.).

Если мы возьмем общий объект, такой как «Клиент», это отображается в нескольких моделях. До сих пор у меня есть две модели. Entity Framework достаточно умен, чтобы создать только один класс клиентов (мы используем шаблоны Poco T4 по умолчанию для генерации классов), однако, когда я пытаюсь запустить проект, я получаю следующую ошибку: «Несколько типов с именем« Клиент »существуют в EdmItemCollection в разных пространствах имен. Контекстное сопоставление требует уникальных имен без учета пространства имен в EdmItemCollection ».

Я правильно понял, что Entity Framework не позволяет «Заказчику» существовать в нескольких моделях? Если я действительно хочу, чтобы клиент появлялся в нескольких моделях, мне нужно начинать создавать разные версии класса клиентов, чтобы справиться с ним?

Извинения заранее, если это глупый вопрос, но я относительно новичок в EF.

Благодаря ...

+0

Конечно, у вас могут быть две одинаковые модели, они не должны пересекаться. Если они перекрываются, EF не сможет найти, какой из них использовать. – KrishnaDhungana

ответ

1

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

Проверить ссылку на Julie Лермана для справки:

http://msdn.microsoft.com/en-us/magazine/jj883952.aspx

Извините, если я из контекста. Но, по моему опыту в таком сценарии, мы должны создать два разных контекста, таких как «MarketingModelContext» и SalesModelContext. MarketingModelContext будет иметь все dbsets, связанные с маркетингом модели вместе с объектом клиента. Точно так же SalesModelContext будет иметь все dbsets, связанные с SalesModel вместе с субъектом клиента. Таким образом, вы создадите только один объект клиента или POCO, который может использоваться двумя контекстами независимо. Это называется ограниченным контекстом, как это называет Джули Лерман. Это поможет вам в разделении контекста, проблем и поможет вам с лучшей производительностью, так как может быть загружен только необходимый контекст (меньшее количество объектов). Вышеупомянутая статья поможет вам в этом.

Надеюсь, что я ответил на ваш запрос.

+0

Так вот, где я нахожусь. У меня есть один проект с двумя моделями. Один из них содержит таблицы, которые относятся к моей маркетинговой деятельности и к продажам. Модели имеют разные имена, то есть «MarketingModel» и «SalesModel», но клиент Customer является общим для обоих. Поэтому я предполагаю, что логично, чтобы каждая модель содержала объекты, которые относятся к конкретной части рассматриваемой системы. Я имею в виду? – NickTaylor

+0

Проверьте приведенный выше отредактированный ответ. –

+0

Bibek, я согласен со всем в вашем комментарии. У меня две модели, каждая из которых содержит объект клиента. На самом деле я начал свой первоначальный вопрос. Структуре Entity все еще не нравится иметь объект Customer в нескольких моделях. Извините, если мне не хватает смысла. – NickTaylor

Смежные вопросы