[英]Replace entity model property with value from database
我有一個包含兩個實體的實體框架對象模型:
Alert (1-*) ----- (1) Check
Check
表在UniqueProperty
列上具有唯一約束。
支票通常是數據庫中預先存在的實體,任何新警報都應添加到現有支票中。
我在代碼中的某個地方創建了一個簡單的對象圖:
var alert = new Alert();
alert.Check = new Check { UniqueProperty = someValue };
稍后,我想保留對象圖:
using (var context = new MyContext())
{
context.Alerts.AddObject(alert);
// Replace temp check with actual database check if available.
var checkFromDb = context.Checks.SingleOrDefault(
c => c.UniqueProperty = alert.Check.UniqueProperty);
if (checkFromDb != null)
{
alert.Check = checkFromDb;
}
context.SaveChanges();
}
因此,當數據庫中有相應的檢查時,請使用該檢查,否則不執行任何操作(它將被簡單地添加)。
上面的代碼導致對UniqueProperty
約束的唯一約束沖突。 原因是EF記住了第一個檢查,即使我后來用數據庫中的檢查替換了它。
我如何擺脫那張第一張支票?
准備好保存之前,請不要設置支票。 如果已經存在,請將警報添加到現有檢查的警報集合中。 如果不是,請與支票創建一個新的關聯,然后將警報添加到數據庫。
var alert = new Alert();
...
using (var context = new MyContext())
{
// Replace temp check with actual database check if available.
var checkFromDb = context.Checks.SingleOrDefault(
c => c.UniqueProperty = alert.Check.UniqueProperty);
if (checkFromDb != null)
{
checkFromDb.Alerts.Add( alert );
}
else
{
alert.Check = new Check { UniqueProperty = some value };
context.Alerts.AddObject(alert);
}
context.SaveChanges();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.