[英]When saving an entity in EF Core, using only an ID for a navigational property returns null for that property
在 Entity Framework Core 3 中,我試圖保存一個實體。 因為我不想在我已經知道 Id 的情況下檢索 User 字段的鏈接 object,所以我只設置該屬性的 ID 字段。
這是我的實體(精簡版):
[Table("Samples")]
public class Sample
{
public Sample() { }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public uint Id { get; set; }
public uint CreatedBy { get; set; }
[ForeignKey("CreatedBy")]
public virtual User CreatedByUser { get; set; }
}
我啟用了 UseLazyLoadingProxies() 並且這適用於其他實體。
現在,因為我已經知道 ID 並且不想進行數據庫往返,所以我創建了一個這樣的新示例並使用 1 的 UserId:
var sample = new Sample
{
CreatedBy = 1
};
var result = await this._context.Samples.AddAsync(sample);
await this._context.SaveChangesAsync();
現在在 result.Entity 中,我發現 CreatedByUser 是 null 並且沒有被代理,即使關系存在於數據庫中並且它被正確保存。 當我單獨檢索實體時,它確實有效。
有沒有辦法在保存示例實體后直接檢索得到正確的 object?
編輯:至於增加混亂。 當我這樣做時:
var user = await userService.GetUserByIdAsync(1);
var sample = new Sample(sampleRequest)
{
CreatedByUser = user
};
有用。 但是當我將此更改還原為:
var sample = new Sample
{
CreatedBy = 1
};
它仍然有效!
看起來有某種緩存系統正在運行。
EDIT2:好的,它不是緩存。 只需調用await userService.GetUserByIdAsync(1);
讓它工作。
但是,我不想對數據庫進行這個額外的調用,我希望 SaveAllChanges() 也可以為我檢索用戶實體(沒有包含)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.