簡體   English   中英

實體約束“檢查”代碼優先

[英]Entity constraint “check” with code-first

我創建了一個表來將商店與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 我需要使用僅代碼開發這些限制,以便能夠發送給我的經理。

如何告訴實體框架僅使用我的代碼創建它?
有沒有DataAnnotation可以做到這一點?

我試圖在特定遷移的方法Up中添加modelBuilder.Sql("ALTER TABLE XXX....") 我只能在創建文件的add-migration 之后將該行add-migration文件中。

每次啟動后檢查是否存在約束的種子查詢,如果不存在則創建它對我來說似乎不太酷。 它也只有在我運行代碼時運行,而不是在遷移/更新數據庫中運行。

使用代碼無法做到這一點。 但是,您可以利用EF遷移過程來運行任意SQL 您還可以在數據庫初始化期間運行sql ,以防需要從新數據庫開始。

話雖這么說, 自定義驗證屬性可能仍然是一個好主意,以便您可以提前捕獲錯誤。

對於元回答感到抱歉,但這些資源在過去幫助了我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM