编程语言
首页 > 编程语言> > c#-实体约束“检查”,代码优先

c#-实体约束“检查”,代码优先

作者:互联网

我做了一张表格,将商店与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))

但是我在添加迁移和更新数据库后手动运行了alter table.我需要仅使用代码来开发这些限制,以便能够发送给我的经理.

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

我试图在特定迁移方法Up中添加modelBuilder.Sql(“ ALTER TABLE XXX ….”).我只能在添加迁移之后创建该文件,并将该行添加到迁移文件中.

每次启动后,都需要一个种子查询来检查约束是否存在,如果不存在则创建约束对我来说似乎并不酷.此外,它仅在我运行代码的情况下运行,而不会与migration / update-database一起运行.

解决方法:

仅使用代码是不可能做到这一点的.但是,您可以将EF迁移过程利用到run arbitrary SQL.如果需要从新的数据库开始,也可以使用run sql during the database initialization.

话虽如此,a custom validation attribute仍然是一个好主意,以便您可以更早地发现错误.

很抱歉提供元答案,但是这些都是过去帮助过我的资源.

标签:net-core,ef-migrations,c,net,entity-framework
来源: https://codeday.me/bug/20191025/1928150.html