3

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 が主キーのないテーブルをサポートしていません。何が正しいですか?ありがとう。

4

2 に答える 2

1

行を一意に識別する方法がまだある場合、EF は PI のないテーブルをサポートできますが、適切な PKないと一意の識別子を推測できません。Report言い換えれば、EF に嘘をつき、たとえば と に PK があると言いChangedます。

于 2010-11-01T13:06:43.613 に答える
1

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 が行を内部的に一意にポイントできるようにします。

于 2013-09-02T17:09:44.623 に答える