Первый код 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 однозначно указывать на строку внутри.

Другие вопросы по тегам