在提交时插入关联
本文关键字:关联 插入 提交 | 更新日期: 2023-09-27 18:19:28
我正在使用LinqToSql将我的数据库映射到Winforms C#应用程序中。
到目前为止,绑定看起来不错,但两个表之间的关系存在问题。
它是一种记录对象历史的记录器。在每个日志事件上,都有一个外键链接到导致该事件的对象。问题是,每次我在日志中创建一行时,都会在另一个表中创建一个具有新ID的新对象。我只想使用现有ID的现有对象。
将对象插入数据库
System.Data.Linq.Table<History> history = dataContext.GetTable<History>();
History h = new History()
{
ReadTime = DateTime.Now,
MyObject = o
};
// The "MyObject" is a reference to an existing object.
history.InsertOnSubmit(h);
// OnSubmit a new MyObject is created with a new ID,
// instead of referencing the existing one.
history.Context.SubmitChanges();
模型类
[Table(Name = "tbl_History")]
public class History : INotifyPropertyChanged
{
private long m_HistoryID;
private int m_MyObjectFK;
private EntityRef<MyObject> m_MyObject = new EntityRef<MyObject>();
private DateTime m_ReadTime;
[Column(IsPrimaryKey = true, IsDbGenerated = true, Name = "HistoryID")]
public long HistoryID
{
get { return this.m_HistoryID; }
set { this.m_HistoryID = value; }
}
[Column(Storage="m_MyObjectFK")]
public int MyObjectFK
{
get { return this.m_MyObjectFK; }
set { this.m_MyObjectFK= value; }
}
[Association(Name = "FK_tbl_History_tbl_MyObject",
IsForeignKey = true, Storage = "m_MyObject", ThisKey = "MyObjectFK")]
public MyObject MyObject
{
get { return m_MyObject.Entity; }
set
{
m_MyObject.Entity = value;
NotifyPropertyChanged("MyObject");
}
}
[Column(Name = "ReadTime", DbType = "DateTime", CanBeNull = false)]
public DateTime ReadTime
{
get { return m_ReadTime; }
set
{
m_ReadTime = value;
this.NotifyPropertyChanged("ReadTime");
}
}
}
我已经解决了这个问题。发生这种情况是因为我试图引用的对象来自另一个DataContext
。在这种情况下,它被识别为一个新对象。在关联中使用它之前,必须将它重新附加到DataContext
。
新代码
System.Data.Linq.DataContext dataContext = new System.Data.Linq.DataContext(connection);
dataContext.GetTable<MyObject>().Attach(o); // Add this line and reattach the MyObject o.
System.Data.Linq.Table<History> history = dataContext.GetTable<History>();
在这个链接下也回答了类似的问题。
为什么LINQ到SQL实体关联在插入新记录时会创建一个新的(重复的)行?