我在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个表,我没有这些表
答案 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");