Почему я не могу создать отношение 1 ко многим без первичного ключа? - PullRequest
1 голос
/ 11 июня 2019

Я часами возился с представлением «Дизайн» моего класса DBML.У меня есть один класс, называемый A, который имеет отношение 1 ко многим с B, C, D и E. В сгенерированном коде я вижу, что класс A сгенерировал

private EntitySet<BB> _bb;
private EntitySet<CC> _cc;
private EntitySet<EE> _ee;

Но этоне сгенерировал один для D. Наконец, для хихиканья я добавил первичный ключ к D;у всех других классов был один, кроме D;и сейчас он генерирует EntitySet _dd.Но почему это?Мне не нужна эта таблица, чтобы иметь указанный первичный ключ.

1 Ответ

1 голос
/ 11 июня 2019

Я предполагаю, что вы используете LINQ to SQL из-за файлов .dbml.LINQ to SQL (и Entity Framework в некоторой степени) борются с таблицами, которые не содержат первичных ключей.В частности, таблице нужен первичный ключ для реализации INotifyPropertyChanged (интерфейс, который отслеживает изменения для конкретного удостоверения ... как можно отслеживать сущность, если у нее нет первичного ключа?).Хороший пример того, почему это необходимо, можно найти здесь.

https://social.msdn.microsoft.com/Forums/en-US/f3b216d2-fa06-49a1-a901-11702e80b38c/linq-to-sql-table-doesnt-have-primary-key?forum=linqtosql

Как продолжение, есть ли конкретная причина, по которой у таблицы нет первичного ключа?Разве это не представляет сущность в вашей модели данных?Если это таблица поиска, возможно, вы можете обернуть функциональность в хранимую процедуру, а затем вызвать хранимую процедуру через LINQ to SQL.

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