比方说,我们有几个客户,每个客户都有一个带有“ Employees”表的数据库,但是对于每个客户来说,该表都有点不同。大多数列都是相同的,但是有一些客户端的该表具有更多/更少的列。
我目前有一个“ Employee”类,它代表基本表,该表在DbSet的DbContext中使用。 最终,我只想对该表进行一些CRUD操作。
使用EFCore,我在编写通用代码时遇到了一些麻烦,该代码对所有客户端都适用,无论该表有多少列。 (所有客户的tableName保持不变)
关于如何解决此问题的任何想法? 也许动态创建实体?还是扩展当前的“雇员”类?
答案 0 :(得分:1)
共有3种常见的方法来实现继承
在EF内核中,仅第一个适用。此外,您可以为区分符列指定名称和数据类型,并为每种类型指定值。如果您使用流畅的配置,它将是:
modelBuilder.Entity<Employee>()
.ToTable("Employee")
.HasDiscriminator<int>("EmployeeType")
.HasValue<Vanilla>(1)
.HasValue<Customer1>(2)
.HasValue<Customer2>(3);
这会将所有值存储在一个表中,并且如果不是Customer1,则Costumer1的特定值将为null。正如您说的“多/少列”一样,我制作了香草,而Employee将是所有人通用的真正基类。
此外,这是一个如何设置table per hierarchy的示例。