【发布时间】:2018-07-19 10:07:27
【问题描述】:
我制作了一个表格,将商店与 Table1 OR Table2(和其他信息)相关联
Id
IdStore_FK
IdTable1_FK
IdTable2_FK
SomeOtherFieldsThatDoesntMatterRightNow
我创建了一个检查约束以确保它永远不会同时填充两个 FK,并且必须只填充其中一个(XOR):
ALTER TABLE TABLE0 ADD CHECK ((IdTable1_FK IS NULL AND IdTable2_FK IS NOT NULL) OR (IdTable1_FK IS NOT NULL AND IdTable2_FK IS NULL))
但我在 add-migration 和 update-database 之后手动运行了 alter table。我需要使用纯代码开发这些限制,以便能够发送给我的经理。
我如何告诉实体框架仅使用我的代码来创建它?
是否有任何 DataAnnotation 可以做到这一点?
我尝试在特定迁移的方法Up 中添加modelBuilder.Sql("ALTER TABLE XXX....")。我只能将该行添加到迁移文件之后 add-migration,这会创建文件。
每次启动后进行种子查询,检查约束是否存在,如果不存在则创建它对我来说似乎并不酷。此外,它只有在我运行代码时才会运行,而不是在迁移/更新数据库中运行。
【问题讨论】:
-
@kettch 我之前确实看到过这个问题,这就是让我尝试
modelBuilder.Sql("...")的原因。但早在 2012 年,还没有 .Net Core。只是想也许 EntityFramework 可以在对 Core 进行返工后实现它。 (EF 6.1 实现了一种使用注释创建索引的方法)
标签: c# .net entity-framework .net-core entity-framework-migrations