2

Entity Framework 6.1を使用してPayGroupオブジェクトから従業員オブジェクトへの参照を取得する際に問題が発生しています。 PayGroup.SupervisorId - > Employee.EmployeeIdのデータベースに外部キーがあります。これはゼロまたは1対1の関係であることに注意してください(支払グループには1つのスーパーバイザーしかいませんが、従業員は1つの支払グループのスーパーバイザーになることができます)。EF 6.1の異なるプライマリキーとの関係最初のコード

this post on GitHubによれば、異なる主キーを持つテーブルに外部キーを持つことはできません。データベースに外部キーを手動で追加しましたが、有料グループから従業員オブジェクトを取得できるように流暢なAPIマッピングを設定する方法がわかりません。

ペイ・グループ表

Pay Group Table

従業員表

Employee Table

注:PayGroup.SupervisorIdからの外部キーがあります - データベース内Employee.EmployeeId 。以下は

DTOの(私は現在、これらのクラス間の任意の協力関係のマッピングを持っていない)されています(あなたのPayGroup.SupervisorIdのような)明示的なFKプロパティで

public class PayGroup 
{ 
    public int Id { get; set; } 
    public string SupervisorId { get; set; } 
    public virtual Employee Supervisor { get; set; } 
} 

public class Employee 
{ 
    public string EmployeeId { get; set; } 
    public string FullName { get; set; } 
} 
+0

[this](http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx)のようなものを試してみてください。 –

答えて

4

one-to-one関係がサポートされていません。以下の流暢なマッピングを

public class PayGroup 
{ 
    public int Id { get; set; } 
    public virtual Employee Supervisor { get; set; } 
} 

をして使用します:

だから、モデルからそのプロパティを削除

modelBuilder.Entity<PayGroup>() 
    .HasRequired(e => e.Supervisor) 
    .WithOptional() 
    .Map(m => m.MapKey("SupervisorId")); 

WithOptional()コールは2つのことを指定します。最初に、Employeeクラスに逆ナビゲーションプロパティがなく、2番目にFKがオプションであること(表のAllow Nulls = true)です。

あなたはWithOptional(e => e.PayGroup)に逆ナビゲーションプロパティに

public class Employee 
{ 
    public string EmployeeId { get; set; } 
    public string FullName { get; set; } 
    public virtual PayGroup PayGroup { get; set; } // <= 
} 

変更して追加することを決定した場合。

あなたはそれが必要(表中のAllow Nulls = false)を作成する場合は、その後、(ここでEmployee主要なり、PayGroup依存になることを意味し依存)対応WithRequiredDependentオーバーロードを使用します。

+0

それがはっきりと説明されるので簡単です。私は、WithOptionalとHasRequiredによって混乱していると思う。私はまた、PayGroupからSupervisorIdフィールドを削除しないように最善を尽くしていました。ありがとう! –

関連する問題