[英]How to use EF6 (DB-first) with ASP.NET core web application(.NET framework 4.6.1)?
[英]To add navigation property without foreign key in EF Core, DB-first migration with .NET Core Web API
我正在使用現有系統並將其更新到 .NET Core、Web API 和 EF Core。
現有系統有 2 個表:
雖然ParentId
存在於子表中,但沒有外鍵引用,但我希望在查詢父表時能夠使用 include。 我已經要求不要添加 FK 作為刪除它們將 -ve 值放入parentId
列的一部分。 通過這種方式,他們可以將其帶回來,並以這種方式構建遺留系統。
現在,在 db-first 遷移中,如何在沒有 fk 的情況下指定導航屬性,以便我的 EF Core 執行關系; 或者至少將它們一起歸還。 添加可為空的外鍵不是一個選項,因為當添加 -ve 值時它會破壞系統。
我確實建議完全清理數據庫並擺脫 -ve 值,但這涉及大量測試並且沒有可交付成果。 長話短說,如何在數據庫首次遷移中添加沒有外鍵的導航屬性?
我嘗試在 model 中添加集合和虛擬條目,但遷移后它被覆蓋了。 我已經按照本文檔在模型構建器上使用 HasMany 添加了這個 - https://docs.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key% 2C簡單鍵
但是腳手架覆蓋了我的導航屬性
我找到了答案。
在 EF 核心 3.x 中,由 DBFrist 腳手架創建的 dbcontext 都是部分類。 所以我做了以下事情: 1. 上下文 class 的新部分 class - 這里我使用 OnModelCreatingPartial() 方法添加了導航屬性的關系。 下面的例子
public partial class dbContext : DbContext
{
partial void OnModelCreatingPartial(ModelBuilder builder)
{
builder.Entity<Packcomponent>()
.HasOne(p => p.Pack)
.WithMany(b => b.PackComponent)
.HasForeignKey(p => p.PackId);
}
}
在新文件中擴展了部分 class 並在那里添加了導航屬性。
public partial class Packcomponent { public Pack Pack { get; set; } } public partial class Pack { public List PackComponent { get; set; } }
這樣在搭建腳手架時它不會覆蓋自定義導航屬性,我也可以使用此屬性來執行 EF 操作,例如.Include() 並保存相關實體。 真是太棒了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.