#asp.net #sql-server #entity-framework
#asp.net #sql-сервер #entity-framework
Вопрос:
Я создал представление, чтобы обратная сторона моего веб-сайта была более последовательной. Затем я попытался сопоставить его с моей схемой сущностей.
У меня было сообщение :
Первичный ключ не определен, не удалось вывести первичный ключ, таблица исключена
Итак, я сделал один! Я убедился, что это что-то уникальное, объединив 3 столбца, которые не могут быть идентичными при объединении. И я назвал этот новый столбец «id».
Сущность, похоже, не согласна с уникальным аспектом моего «идентификатора», потому что сообщение об ошибке не исчезнет, и я не могу импортировать свое представление…
Ответ №1:
Ну, мне пришлось использовать sql-функцию ISNULL(id,) в моем столбце «id», сделав его значением not null, чтобы сущность понимала, что оно НИКОГДА не может быть нулевым, и, следовательно, обнаруживала его как потенциальный первичный ключ
Комментарии:
1. это не то, что является задачей EF. «id» должен быть ключом после соглашений code first, если нет, вы должны объявить его как ключ, используя аннотации данных или fluent API. Однако, когда вам приходится использовать sql, это предполагает подход DB first. Там КАЖДАЯ таблица должна иметь ненулевую комбинацию столбцов PK, поэтому, если что-то не так в метаданных, EF может ожидать, что модель будет неправильной (она не сможет воссоздать таблицу с использованием метаданных) и исключить ее.
2. Я использую первый подход db, да, но, видите ли, обычно я каким-то образом получаю уникальные поля (первичные ключи) внутри своих представлений. В этом случае мне даже не нужно указывать, что столбец witch является потенциальным первичным ключом, сущность выполняет эту работу за меня и решает, что комбинация полей witch будет представлять лучший первичный ключ в представлении, но на этот раз у меня не было никаких (не нулевых) уникальных значений, поэтому я создал один иуказано, что оно не может быть нулевым … я знаю, это странно, но это сработало
3. EF будет знать любое свойство с именем «Id» или TypeName ( ‘_’) «Id» — это PK создаваемого свойства, если это не так, вам придется указать его, я не думаю, что он распознает какую-либо другую комбинацию, поскольку он не будет знатькакие свойства являются уникальным идентификатором для всех строк. Если вы сначала используете код, вы можете взять любую комбинацию не обнуляемых свойств (которые могут быть сопоставлены отдельным столбцам) и указать их в качестве ключа, используя аннотацию данных / fluent api.
4. Я проверил, что это не относится к БД в первую очередь