Eduard Keilholz Ответов: 1

Ограничение внешнего ключа для нескольких полей


Товарищи,

У меня есть таблица SQL Server & lt;entity>, которая находится в определенном администрировании. В таблице на <лицо>, который имеет отношение с &ЛТ;entitystatus&ГТ;.

& lt;сущность>
Id (int, PK, auto-increment)
AdminstrationId инт
Статус int
Наименование тип varchar
....

& lt;entitystatus>
Id (int, PK, auto-increment)
AdminstrationId инт
Количество инт
Наименование тип varchar

Как вы можете видеть, обе таблицы имеют поле Id, которое является PK и имеет автоматическое приращение.

Теперь я хочу, чтобы entity framework создала связь между обоими полями AdministrationId и<entity & gt;.Поле Status & lt;entitystatus>Number.

Как я могу это сделать?

Код, приведенный ниже в разделе "Что вы пробовали", на самом деле работает для отношения, но он удаляет поле Id как PK таблицы состояния. Это приводит к ошибке при вводе новых значений состояния в таблицу & lt;entitystatus>

Что я уже пробовал:

modelBuilder.Entity<Entity>()
    .HasKey(c => new { c.AdministrationId, c.Number });

modelBuilder.Entity<Entity>()
    .HasRequired(p => p.EntityStatus)
    .WithMany(x => x.Entities)
    .HasForeignKey(p => new { p.AdministrationId, p.Status });

1 Ответов

Рейтинг:
0

W∴ Balboos, GHB

Обычно я строю таблицы/отношения для SQL в SQL-утилите (например, SQL Server Management Studio).

Кроме того, я бы все равно следовал примерно тому же маршруту: создавал таблицы, устанавливал первичные ключи и отношения в виде дискретных SQL-запросов, а не параметризованных кодом C#.

Я предпочитаю, чтобы SQL обрабатывал SQL (даже если через C#, C++, php,...)
Установите SQL-соединение
Установите строки запроса
Выполнять их


Eduard Keilholz

Это именно то, что я делаю, мне просто нужно определить отношение в моем datacontext, чтобы я мог использовать include ion my linq queries для извлечения статусов, связанных с основной сущностью. И вместо того, чтобы использовать идентификатор в сущности, я хотел бы использовать номер статуса, потому что большинство применений имеют фиксированный и узнаваемый номер статуса.

W∴ Balboos, GHB

Здесь я должен признаться в некотором невежестве; в последний раз, когда я использовал LINQ, его SQL был немного пятнистым, и я полагаюсь на ваш опыт в LINQ по сравнению с моим.

Имея это в виду, я задаюсь вопросом, не LINQ ли теряет ваш ПК? Предполагается ли, что он должен знать и использовать первичный ключ таблицы (и поля идентификации), что потребует от него оставаться подключенным?

Отчасти оправдание моей слабости с LINQ заключается в том, что я работаю с DBA - мы взаимно симбиотичны - и научился создавать исходный SQL, так что возвращаемые данные-это то, что мне нужно и как мне это нужно. Возможно, этот недостаток будет стоить мне в какой-то момент, но мой TSQL намного лучше, чем раньше. Даже для родительско-дочерних списков выбора в HTML (которые могут быть очень удобно обработаны в контексте LINQ).

Но, для того, что вещи похожи на то, что вы делаете, возникли проблемы