实体约束“检查”代码优先

Bru*_*lin 4 .net c# entity-framework .net-core entity-framework-migrations

我制作了一张表格,将商店与 Table1 或 Table2(和其他信息)相关联

Id
IdStore_FK
IdTable1_FK
IdTable2_FK
SomeOtherFieldsThatDoesntMatterRightNow
Run Code Online (Sandbox Code Playgroud)

我创建了一个检查约束以确保它永远不会同时填充两个 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))
Run Code Online (Sandbox Code Playgroud)

但是我在和之后alter table 手动运行了它。我需要仅使用代码来制定这些限制,以便能够发送给我的经理。add-migrationupdate-database

如何告诉实体框架仅使用我的代码来创建它?
是否有任何 DataAnnotation 可以做到这一点?

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

每次启动后的种子查询检查约束是否存在,如果不存在则创建它对我来说似乎并不酷。此外,它只会在我运行代码时运行,而不是与迁移/更新数据库一起运行。

Dev*_*ble 5

仅使用代码无法做到这一点。但是,您可以利用 EF 迁移过程来运行任意 SQL。您还可以在数据库初始化期间运行 sql,以防您需要从新数据库开始。

话虽如此,自定义验证属性可能仍然是一个好主意,以便您可以更早地捕获错误。

对不起,元答案,但这些是过去帮助过我的资源。