2016-09-15 2 views
4

У меня есть сценарий, когда мне оптимально нужно отношение 1 к 1 между двумя объектами. Я могу сделать это с помощью EF, но конечный результат - это модель, в которой я не могу вставлять какие-либо данные, поскольку Entity Framework не знает, какой из них следует вставить первым. То же самое происходит, даже если я изменил отношение на 0..1 до 0..1.Структура сущности от 1 до 1?

Приведем пример. У меня есть объект Файл и объект FileData. Файл всегда должен иметь FileData и FileData всегда должны иметь ссылку на файл. Я не хочу, чтобы они находились в одной и той же сущности (таблице), поскольку FileData может стать довольно большой, и мне в основном нужны вещи из файла сущности.

Я хотел бы указать удаление на каскаде между ними так, чтобы, если я удалю файл, также связанный FileData будет удален.

Я хотел бы также, чтобы иметь возможность вставить их обоих в одной транзакции, так что я мог бы написать

new File { FileData = ... 

Так что бы вы предпочли в качестве решения с Entity Framework? На данный момент я добавил отношение только к файлу. Таким образом, я могу отправить оба объекта в БД одним сохранением, но я не получаю удаление на каскаде, поскольку основная запись - это FileData, и этот каскад работает «неправильным образом» в моем случае использования.

+0

Вы можете показать свой код модели? – Sampath

+0

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

+0

Вы можете использовать этот проект github в качестве образца. Проверьте отношения File-FileData. В текущем состоянии этих отношений есть некоторые проблемы, но я хотел бы, чтобы это было тем, что я описываю здесь. https://github.com/antsim/EntityFrameworkTester –

ответ

4

Настройка 1-1 отношения корабль, вы должны настроить его таким образом

// Configure FirstClassID as PK for SecondClass 
    modelBuilder.Entity<SecondClass>() 
     .HasKey(m => m.FirstClassId); 

    // Configure FirstClassId as FK for SecondClass 
    modelBuilder.Entity<FirstClass>() 
       .HasRequired(m => m.SecondClass) 
       .WithRequiredPrincipal(m => m.FirstClass); 

это приведет к FirstClassId является PrimaryKey в обоих классах и внешний ключ во втором классе, т.е. SecondClass является слабая организация

вы можете прочитать больше об одном в одном отношении here

надеюсь, что это поможет вам

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