代码优先的实体约束 "check"

Entity constraint "check" with code-first

我做了一个 table 将商店与 Table1 或 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-migrationupdate-database 之后 alter table 手动 。我需要仅使用代码制定这些限制,以便能够发送给我的经理。

如何告诉 entity framework 仅使用我的代码创建它?
是否有任何 DataAnnotation 可以做到这一点?

我试图在特定迁移的方法 Up 中添加 modelBuilder.Sql("ALTER TABLE XXX....")。我只能将该行添加到迁移文件 之后 add-migration,这会创建文件。

每次启动后检查约束是否存在并在不存在时创建它的种子查询对我来说似乎不太酷。此外,只有当我 运行 代码而不是 migration/update-database.

时,它才会 运行

仅使用代码无法做到这一点。但是,如果您需要从新数据库开始,您可以利用 EF 迁移过程 run arbitrary SQL. You can also run sql during the database initialization

话虽这么说,a custom validation attribute 可能仍然是个好主意,这样您就可以更早地发现错误。

抱歉,元答案,但这些资源在过去对我有帮助。