1

私は Entity Framework が初めてで、おそらく簡単な質問があります。

明確にするために、構造を最大限に単純化しました(そうであることを願っています)。

名前だけの単純な「エンタープライズ」クラスを作成するだけでよいと想像してください。次に、ワーカーの名前だけを持つ「Worker」という名前の別のクラス。ワーカーはエンタープライズに属している必要があります。エンタープライズにはマネージャー (ワーカー) が必要です。

したがって、これらの単純なクラスをどのように想像するかを次に示します。

public class Worker
{
    public int WorkerId { get; set; }
    public String Name { get; set; }

    public int EnterpriseId { get; set; } // ForeignKey for Enterprise
    public Enterprise Enterprise { get; set; }
}

public class Enterprise
{
    public int EnterpriseId { get; set; }
    public String Name { get; set; }

    public Worker Manager { get; set; }
    public List<Worker> Workers { get; set; }
}

これらのクラスが次の DB 構造になるようにしたいと思います。

Table Worker
    WorkerId (PK, int, not null)
    Name (varchar(128), not null)
    EnterpriseId (FK, int)

Table Enterprise
    EnterpriseId (PK, int, not null)
    Name (varchar(128), not null)
    Manager (FK, int)

modelBuilder でいろいろ試してみましたが、どうしても欲しいものが得られません。私がやりたいことを行うための Fluent API を使用したソリューションはありますか?

ご助力ありがとうございます。

4

2 に答える 2

0

manager オブジェクトを取得する方法はわかりませんがInheritance、設計を最適化するために使用する必要があると思います。これを試して:

public abstract class Employee
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int EmployeeId{ get; set; }

    public String Name { get; set; }

    [ForeignKey("Enterprise"), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int EnterpriseId { get; set; } // ForeignKey for Enterprise

    public Enterprise Enterprise { get; set; }
}

[Table("Workers")] // Table per Type (TPT), This will be your Table name in your database
public class Worker : Employee
{
   //Add properties only related to workers
}

[Table("Managers")] // Table per Type (TPT). This will be your Table name in your database
public class Manager : Employee
{
   //Add properties only related to Managers
}

public class Enterprise
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int EnterpriseId { get; set; }
   public String Name { get; set; }

   public virtual ICollection<Employee> Employees{ get; set; }
}

:申し訳ありませんが、これは使用して行われますProperty Mapping

リンク:これは、単純な Fluent Mapping の例へのリンクです。

リンク: Table per Type (TPT) の継承については、こちらをご覧ください。

于 2013-04-09T22:36:17.723 に答える