我在項目中使用實體框架6.0.0,首先使用代碼和DbContext API。在我的應用程序,還有一些有一個一對多的關係,2個實體對象如下圖所示首先使用實體框架代碼保存單個EntityObject
class RefTable {
[Key]
public int Id { get; set; }
public string RefName { get; set; }
public virtual ICollection<Data> DataDetails { get; set; }
}
public class Data
{
[Key]
public int Id { get; set; }
public string RefId { get; set; }
[ForeignKey("RefId")]
public virtual RefTable Machine { get; set; }
}
的RefTable
將在應用程序啓動填充,也就勉強接受改變。但Data
將不時發生變化。
我Context.cs是如下
public class MyDbContext : DbContext
{
public MyDbContext()
: base("name=CounterDbString")
{
Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>());
}
public DbSet<RefTable> RefData { get; set; }
public DbSet<Data> Data { get; set; }
}
的代碼我用來保存數據
public void Write(IList<RefTable> refDataList)
{
foreach (var entity in refDataList)
{
var element = myContext.RefData.Find(entity.Id);
if (element == null)
{
myContext.RefData.Add(entity);
}
}
myContext.SaveChanges();
}
public void Write(IList<Data> dataList)
{
myContext.Data.AddRange(dataList);
myContext.SaveChanges();
}
當我試圖在第二個函數執行myContext.SaveChanges()
,我總是得到更新錯誤說法violation of Primary Key
,因爲它試圖將相同的數據插入RefTable
。有沒有辦法只保存Data
對象中的更改?
顯示代碼/改變實體保存之前。 – 3615
更新了上面的問題。 – SohamC
你需要顯示調用'Write'的代碼 - 你如何獲得作爲參數傳遞的實體。 「Write」都沒有錯,問題在於你稱之爲後者的地方。 –