2016-11-04 5 views
0

Я хочу создать 3 таблицы на основе 3-х объектов с использованием кода и свободного API. Я использую Entity Framework версии 6. Для таблицы соединений необходим первичный ключ из трех столбцов и дополнительные столбцы.Соедините таблицу во многих-ко-многим с первичным ключом из 3 столбцов

Мой вопрос: как я могу использовать код сначала с API C# Fluent для создания/сопоставления первичного ключа с тремя столбцами для таблицы PatientTreatment? Спасибо.

Детали первичного ключа с 3 колонками для таблицы соединений {PatentId, TreatmentId, TreatmentDate}. Значения PatentId и TreatmentId извлекаются из двух других сущностей (таблиц), а значение TreatmentDate вводится вручную (например, код C# или скрипт T-SQL, например, вызов функции getdate()).

Детали 3 лиц:

public class Patient { 
    public long PatentId {get; set;} // database created using Identity 
    ... 
} 

public class Treatment { 
    public long TreatmentId {get; set;} // database created using Identity 
    ... 
} 

И присоединиться к таблице (сущности)

public class PatientTreatment 
{ 
    public long PatentId {get; set;} // part of the primary key from the Patient entity 
    public long TreatmentId {get; set;} // part of the primary key from the Treatment entity 
    public DateTime TreatmentDate {get; set;} // part of the primary key but its value is from C# code or from T-SQL script, not from other entity (table) 
    // other fields ... 
} 

ответ

1

Вы не могут смоделировать это как многие-ко-многим в ассоциации который скрыт в классе PatientTreatment, что обычно называют «многие-ко-многим» в преобразовании структуры Entity Framework.

Но вы не намеревались это делать, как видно из явного класса PatientTreatment, который вы показываете. Так что это просто вопрос правильного моделирования.

В OnModelCreating переопределение вашего DbContext подкласса, настройки отображения, как так:

protected override void OnModelCreating(DbModelBuilder mb) 
{ 
    mb.Entity<PatientTreatment>() 
     .HasKey(x => new { x.PatientId, x.TreatmentId, x.TreatmentDate }); 
    mb.Entity<Patient>().HasMany(p => p.PatientTreatments) 
     .WithRequired().HasForeignKey(x => x.PatientId); 
    mb.Entity<Treatment>().HasMany(t => t.PatientTreatments) 
     .WithRequired().HasForeignKey(x => x.TreatmentId); 

    base.OnModelCreating(mb); 
} 

Я думаю, что эта линия HasKey(x => new { x.PatientId, x.TreatmentId, x.TreatmentDate }) является то, что вы искали в основном.

0

Я просто Serch это в StackOverflow

Это невозможно создать много -to-many с настраиваемой таблицей соединения . В отношениях «многие ко многим» EF управляет таблицей соединения внутренне и скрытно. Это таблица без класса Entity в вашей модели. Для работы с такой таблицей объединения с дополнительными свойствами вы должны создать фактически два один-ко-многим отношений проверить это many to many with extra column