我使用DataSet写入桌面WPF应用程序中的数据库。
我为一个包含多个不同文档的测量窗口创建一个数据集。 我添加一些起始数据(向几张表中添加新行),然后将其绑定到适当的字段(TextBoxes,CheckBoxes)。
现在数据集已更改,但我可以重置它们:
dataSet.AcceptChanges();
然后,当用户进行更改时,我可以使用以下方法跟踪更改:
dataSet.HasChanges();
dataSet.GetChanges();
我想将应用程序转移到实体框架。
我发现我可以绑定到dbContext.MyTable.Local
,并通过dbContext.ChangeTracker.HasChanges()
检查更改。但是,我找不到添加一些数据并重置HasChanges()状态的方法。
是否可以使用EF生成的模型和类而无需开放连接到数据库?
我应该建立自己的模型并仅将EF用于写入数据库吗?
答案 0 :(得分:1)
您可以使用Attach
方法将实体添加到上下文:
dbContext.MyTable.Attach(myRow);
这将添加实体状态为Unchanged的实体:
dbContext.Entry(myRow).State == EntityState.Unchanged;
将更改应用于实体后,实体跟踪器将检测到这些更改:
dbContext.ChangeTracker.HasChanges()
但是,由于您的实体并非真正来自数据库,因此如果您想插入这些记录,则可能需要将实体状态更改为“已添加”,然后dbContext.SaveChanges()
将处理其余记录。
if(dbContext.ChangeTracker.HasChanges())
{
dbContext.Entry(myRow).State = EntityState.Added;
dbContext.SaveChanges();
}
有关更多信息,请参见this post。
HTH