我想使用EF做一個數據加載並卡住當兒童記錄存在時無法插入新記錄的地方。這是一個例子。實體框架:用新的父對象更新現有的子對象
public class Position
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
public string PositionName { get; set; }
}
public class Application
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
public string ApplicationName { get; set; }
public Position ApplicationPosotion { get; set; }
}
在上述例子中的多個應用程序可以屬於一個位置。假設我們已經有職位記錄,並且如果我撥打以下電話,它將失敗,因爲ID爲5的位置已經在數據庫中。
public static void UseEntityFrameWorkOneFail()
{
using (var db = new DemoDbContext(@"Server=DESKTOP-HUJVOQ5\SQLEXPRESS;Database=Demo2;Trusted_Connection=True;"))
{
Application appOne = new Application
{
Id = 7,
ApplicationName = "AppOne",
ApplicationPosotion = new Position { Id = 5, PositionName = "ABC" }
};
db.Applications.Add(appOne);
db.SaveChanges();
appOne = db.Applications.Find(7);
Console.WriteLine(appOne.ApplicationPosotion.PositionName);
}
}
現在我可以拉這個紀錄,讓這樣的電話,得到它的工作
public static void UseEntityFrameWorkPass()
{
using (var db = new DemoDbContext(@"Server=DESKTOP-HUJVOQ5\SQLEXPRESS;Database=Demo2;Trusted_Connection=True;"))
{
Application appOne = new Application
{
Id = 8,
ApplicationName = "AppOne",
ApplicationPosotion = db.Positions.Find(5)
};
db.Applications.Add(appOne);
db.SaveChanges();
appOne = db.Applications.Find(8);
Console.WriteLine(appOne.ApplicationPosotion.PositionName);
}
}
但是我想知道如果有一個簡單的方法來做到這一點。我將JSON轉換爲對象並保存用於數據加載目的。
我只想要的是如果子記錄存在(在這種情況下位置),那麼只需使用新值更新它。 一個的Upsert
Application appOne = new Application
{
Id = 7,
ApplicationName = "AppOne",
ApplicationPosotion = new Position { Id = 5, PositionName = "123" }
};
db.Applications.AddOrUpdate(appOne);
db.SaveChanges();
在那裏我使用AddOrUpdate會做的Upsert父對象,但不是孩子的對象上面的例子。我希望子對象也被更新。
感謝
以上仍然強迫我做檢查。我正在尋找一種方法來覆蓋子對象具有的任何值。更喜歡Upsert –
是不是'db.Positions.FirstOrDefault(o => o.Id == 5))??''而不是'.Any('? – Developer