2012-01-27 4 views
1

В настоящее время я пытаюсь перенести проект в POCO EF4, чтобы избавиться от EntityObject в моей бизнес-логике и столкнулся с проблемой с именами дубликатов таблиц. DAL имеет доступ к 3 различным базам данных, и есть 3 файла .edmx, по одному для каждой базы данных.EF4 POCO имена дубликатов таблиц

Однако некоторые таблицы в этих базах данных имеют одно и то же имя, например. DB1.CUSTOMER и DB2.CUSTOMER. Мне удалось создать связанные объекты, созданные в разных пространствах имен (одно пространство имен для каждой базы данных), такое как MyApp.Db1.CUSTOMER и MyApp.Db2.CUSTOMER, проблема в том, что EF не может решить, какой из них выбрать, и утверждает, что существует двусмысленность, которая на самом деле это не так.

Есть ли способ сопоставления объектов с соответствующими POCO вручную или любым способом обхода? Это EF 4.2.

ответ

2

EF не использует пространство имен при распознавании типа сущности. Имя класса сопоставляется непосредственно с именем объекта на диаграмме модели (EDMX). Таким образом, обходной путь использует разные имена в разных моделях, что также сделает ваш код более удобным для чтения.

+0

Это, как я боялся тогда. У меня нет проблем с переименованием объектов в модели. Однако переименование самих таблиц не является вариантом, так как мой проект не единственный, кто обращается к этим БД. Таким образом, единственный способ - сопоставить эти таблицы с объектами в EDMX. Я полагаю, что могу сделать это в SSDL, изменив EntityType для данного EntitySet. Это оставляет проблему будущих обновлений (т. Е. Будут ли эти изменения перезаписаны, если я обновляю модель из БД). –

+1

Вы ничего не можете изменить в SSDL. SSDL описывает реальные имена таблиц в базе данных. Просто переименуйте свои объекты на диаграмме и он должен автоматически обновлять сопоставление от таблицы до вашего нового имени сущности. –

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