2011-08-10 12 views
12

EF 4.1およびFluent APIを使用して、従来のデータベースからデータを取得しています(データベースを変更できません)。関連する列がプライマリキーと外部キーではない2つのテーブル間の関係を作成する際に問題が発生しています。Entity Framework 4.1のFluent APIとの非主キーフィールドの関連付けの作成

以下のクラスでは、Report.RunStatsがReportCodeフィールドが等しいすべてのRunStatエンティティを返すように、ReportとRunStatの1対多の関係をどのように設定しますか。

public class Report 
{ 
    [Key] 
    public int ReportKey { get; set; } 
    public string Name { get; set; } 
    public int ReportCode { get; set; } // Can we associate on this field 
    public virtual ICollection<RunStat> RunStats { get; set; } 
} 

public class RunStat 
{ 
    [Key] 
    public int RunStatKey { get; set; } 
    public int ReportCode { get; set; } 
    public DateTime RunDate { get; set; } 
} 

基本的に私はReport.ReportCodeがForeignKeyのですRunStat.ReportCodeが主キーであることを考えるようにEFを設定するには、流暢APIを使用します。

答えて

10

できません。 EFの関係は、データベースとまったく同じ規則に従います。これは、プリンシパルテーブルが従属テーブルによって参照される一意の識別子を持たなければならないことを意味します。データベースの場合、識別子は主キーまたはプリンシパルテーブルの一意の列のいずれかになります。さもなければそれは有効な関係ではない。

エンティティフレームワークは一意のキーをサポートしていません。 ReportRunStatの間に1対多の関係を持たせたい場合は、従属テーブル(RunStat)に値がReport.ReportKeyの列が含まれている必要があります。それを自動化する他の方法はありません。そうしないと、カスタムプロパティを作成し、必要に応じてエンティティフレームワークから手動で入力する必要があります。

+1

これをEntity Frameworkの新機能として追加することに投票してください。http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050579-unique-constraint-ie-candidate-key-サポート – Brian

関連する問題