2016-06-19 6 views
1

Я новичок в EF. Я делаю приложение с EF6 Code Первый подход, я сделал все мои объекты POCO для получения базового класса, который определяет Id. Я не знаю, как объявить конструктор для объекта, который обрабатывает много-много релятивистов. Например:конструктор по умолчанию для объекта POCO в EF6 Первый подход кода

Я получил эту сущность:

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, что я хочу, чтобы установить его суперкласс для BaseEntity класса, который имеет конструктор по умолчанию, который устанавливает его Id и я не знаю, как обращаться с ArqApplication и ArqRole свойства и их Проппер IdS

Мой базовый класс:

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

Вы можете оставить Идентификатор в базовом классе, и в этом случае вам нужно настроить свое индивидуальное соответствие с Fluent API.

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)