LINQ to Entities, несколько однозначных ссылок на одни и те же таблицы и именование

Я начал портировать приложение .NET SQL Server на LINQ to Entities. У меня есть (среди прочего...) одна таблица под названием «Пользователи» и одна под названием «Время». Время сообщается для конкретного пользователя (UserId), но также записывается, какой пользователь сделал отчет (InsertedByUserId) и, возможно, кто обновил время с момента вставки (UpdatedByUserId). Это дает мне три ссылки на таблицу Users.

Когда я создаю .EDMX из этого, я получаю три ссылки на пользователей таблицы: User, User1 и User2. Без ручного редактирования я не могу узнать, какой из них относится к полю UserId, InsertedByUserId или UpdatedByUserId.

Как это решают другие? Может быть, не нужно регистрировать ВСЕ ссылки и придерживаться InsertedByUserId и UpdatedByUserId как ints?

(Ручное редактирование не было бы проблемой, если бы база данных никогда не обновлялась, но поскольку мы время от времени вносим изменения в базу данных, нам иногда приходится регенерировать .EMDX, таким образом удаляя все ручные изменения.)

Заранее спасибо!


person joscarsson    schedule 14.10.2010    source источник
comment
Возможно, следует добавить, что я использую ASP.NET и Visual Studio 2010.   -  person joscarsson    schedule 15.10.2010


Ответы (1)


Джос,

Обычно, когда я создаю свои внешние ключи, я называю их соответственно. В конструкторе сущностей вы можете различать различные свойства навигации (т. е. User, User1, User2), просматривая ассоциацию FK (если вы четко назвали свои внешние ключи). Например, у меня есть поля ModifiedById и CreatedById в каждой таблице. Оба поля ссылаются на мою таблицу SystemUser. Мои внешние ключи называются так: FK_[TableName]_SystemUser_CreatedBy и FK_[TableName]_SystemUser_ModifiedBy.

альтернативный текст

Вы должны заметить, что в свойствах навигации вы можете увидеть внешний ключ. Вы также можете изменить имя свойства навигации (которое находится в концептуальной части «CSDL-части» EDMX), и это изменение сохранится, когда вы обновите свой EDMX из базы данных.

person John Hartsock    schedule 14.10.2010
comment
Спасибо за ваш ответ! Именно то, что я хотел знать, я называю свои FK, а затем вручную редактирую свойства навигации, и вместо удаления EDMX я использую функцию обновления/обновления. Вот как вы это делаете? Я думал, что генератор EDMX будет умнее, и что я сделал что-то не так. - person joscarsson; 16.10.2010