2016-01-21 89 views
1

我有threeType MaliOp,LoanEBD,PrmEBD停止EF继承

public class MaliOp 
    { 
     public int Id { get; set; } 

     public int OldId { get; set; } 

     public byte MaliTable { get; set; } 

     public string Date { get; set; } 

     public short OpState { get; set; } 
    } 

    public class LoanEBD : MaliOp 
    { 
     public int? BId { get; set; } 
     public int? Loan { get; set; } 
     public int? PayerBimeGozar { get; set; } 

     [NotMapped] 
     public int OldId { get; set; } 
    } 

    public class PrmEBD : MaliOp 
    { 
     public int? PayerBimeGozar { get; set; } 
     public int? BId { get; set; } 

     [NotMapped] 
     public int OldId { get; set; } 
    } 

两个实体PrmEBD和LoanEBD继承MaliOp。我想通过使用这三种类型在实体框架中创建DBContext。 我有三个表在数据库中的每一个他们。 我不想使用任何EF Inhertance Strategy并将每个添加为独立类型。但不能和EF使用Inhertance策略中的任何一个。 我该怎么做?

回答

2
  1. 创建一个IMaliOp接口并让MaliOp实现它。
  2. 让这两个类实现IMaliOp接口以及
  3. 然后使用automapper(或类似的东西)自动将信息从Entity对象传递到常规对象。

这两个类将代表DTO(数据传输对象)。有很多策略,在那里为DTO-S

你应该避免类继承的实体,否则你的应用程序类将太紧密耦合,以及改变可能证明他们的自我变得太痛苦

0

在您的上下文,重写OnModelCreating;

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<PrmEBD>().ToTable("PrmEBDs"); 
    modelBuilder.Entity<LoanEBD>().ToTable("LoanEBD"); 
    modelBuilder.Entity<MaliOp>().ToTable("MaliOp"); 
} 

这将在您的数据库中创建三个单独的表。

您需要确保在通过MaliOp执行查询时,不要从所有三个表中拉入实例。你可能想要去为所有三个人创建一个共同的interface的方法,以便它们实际上也不会彼此继承。