Первый код CTP4: таблица без первичного ключа?
Можно ли с помощью Entity Framework и Code First создать и использовать таблицу без первичных ключей? Я не могу заставить эту установку работать:
public class Report
{
public virtual int ReportId
public virtual ICollection<ReportChanges> ReportChanges
}
public class ReportChanges
{
public virtual Report Report
public virtual string EditorName
public virtual DateTime Changed
}
Обратите внимание, что я исключил назначение первичного ключа в ReportChanges. Но с этой настройкой я получаю: "Невозможно определить ключ для типа объекта" ReportChanges"".
Либо я что-то упустил, либо Code First не поддерживает таблицы без первичных ключей. Что правильно? Благодарю.
2 ответа
EF может поддерживать таблицу без PI, если есть способ уникальной идентификации строки, но он не может вывести уникальный идентификатор без правильного PK. Другими словами, лгите EF и говорите, что есть ПК, скажем, на Report
а также Changed
,
EF нужен способ отслеживать свои внутренние изменения. Вот пример кода, чтобы помочь другим, кто гуглил это:
public class YourDataContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ReportChanges>().HasKey(x => new {x.Report, x.Changed});
}
}
"New {x.Report, x.Changed}" создает поддельный составной ключ, позволяющий EF однозначно указывать на строку внутри.