实体框架|一个表中的多个对象

时间:2017-05-31 12:58:50

标签: c# entity-framework single-table-inheritance

我在SQL Server中有一个奇怪的遗留表,我想知道我是否可以使用以下逻辑:

Table [PartiesTable]
 - Id
 - FirstName
 - LastName
 - Name
 - Type

以下课程:

public abstract class Party {
   public Guid Id { get; set; }
}

public class Person : Party {
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

public class Company : Party {
   public string Name { get; set; }
}

这是记录的一个例子

╔════╦═════════════╦══════════╦═══════╦══════╗
║ id ║ FirstName   ║ LastName ║ Name  ║ Type ║
╠════╬═════════════╬══════════╬═══════╬══════╣
║ 1  ║ John        ║ Kenedy   ║ NULL  ║ P    ║
╠════╬═════════════╬══════════╬═══════╬══════╣
║ 2  ║ Meresa      ║ Oslo     ║ NULL  ║ P    ║
╠════╬═════════════╬══════════╬═══════╬══════╣
║ 3  ║ NULL        ║ NULL     ║ ACME  ║ C    ║
╚════╩═════════════╩══════════╩═══════╩══════╝

我尝试按照此处的文档(https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application)进行操作,但是他们引用了一个示例,其中有3个表,我没有这些表

1 个答案:

答案 0 :(得分:2)

这实际上是EF代码中的默认行为。只需简单地定义您的类,将它们全部映射到名为PartiesTable的表并设置discriminator列。配置应如下所示:

modelBuilder.Entity<Party>()
            .Map<Person>(m => { m.Requires("Type").HasValue("P"); m.ToTable("PartiesTable");})
            .Map<Company>(m => { m.Requires("Type").HasValue("C"); m.ToTable("PartiesTable"); })
            .ToTable("PartiesTable");