簡體   English   中英

用數據庫中的值替換實體模型屬性

[英]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.

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