2016-06-19 9 views
1

私はEFの新機能です。 私はEF6 Code Firstアプローチでアプリケーションを作っています。すべてのPOCOエンティティをIDを定義する基本クラスから派生させました。 私が知らないのは、多対多の関係性を扱うエンティティのコンストラクタを宣言する方法です。たとえば :EF6コード内のPOCOエンティティのデフォルトコンストラクタ

私は、このエンティティを持っている:

public partial class ArqAppRole 
    { 
     [Key] 
     [Column(Order = 0)] 
     [DatabaseGenerated(DatabaseGeneratedOption.None)] 
     public int ApplicationId { get; set; } 

     [Key] 
     [Column(Order = 1)] 
     [DatabaseGenerated(DatabaseGeneratedOption.None)] 
     public int RoleId { get; set; } 

     public DateTime SinceDate { get; set; } 

     public DateTime? UntilDate { get; set; } 

     public bool IsActive { get; set; } 

     public virtual ArqApplication ArqApplication { get; set; } 

     public virtual ArqRole ArqRole { get; set; } 
    } 

この私が欲しいものEFによって自動生成されたが、それはそれにIDを設定しますデフォルトコンストラクタを持つBaseEntityクラスにスーパークラスに設定することです

public abstract class BaseEntity 
    { 
     private object _id; 

     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public object Id 
     { 
      get 
      { 
       return _id; 
      } 
      protected set 
      { 
       _id = value; 
      } 
     } 

     protected BaseEntity() : this(null) { } 

     protected BaseEntity(object id) 
     { 
      _id = id; 
     } 
} 

答えて

1

あなたは残すことができます:私は

私の基本クラスであるArqApplicationとArqRoleプロパティとそのpropperのIdsを処理する方法がわかりません基本クラスのIDで、このユースケースでは、Fluent APIを使用して1対1のreleshinshipを設定する必要があります。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ArqAppRole>() 
       .HasRequired(s => s.Application) 
       .WithRequiredPrincipal(ad => ad.ArqAppRole); 
} 

Fluent APIは、まずコードを上書きします。しかし、IDを基本クラスに入れるのは悪い習慣であり、あなたはどこでもトリックを見つけなければなりません。単に従来の方法で使用してEFを使用してください。

詳細情報:Code first self referencing foreign key (more than one)

関連する問題