我正在编写一个非常简单的应用程序,但是我遇到了如何处理Linq to SQL DataContexts的问题,因为每次我尝试做一些我认为应该简单的事情时,我会收到一个错误,例如, you can't update entity because it was generated from different data context
。
我有一个Configuration
个对象,可以包含多个ConfigurationFilter
并与User
相关联。
ConfigurationFilter
包含对Filter
和FilterValue
在我的ViewModel构造函数中,我执行以下操作:
public ViewModel() {
using (LinqDataContext dc = new LinqDataContext()) {
this.User = dc.User;
this.Configuration = new Configuration{ User = this.User };
}
}
然后,稍后,我可以编辑配置名称和描述,并且我有一个保存命令:
public void save() {
this.Configuration.Name = this.ConfigurationName;
this.Configuration.Description = this.ConfigurationDescription;
using (LinqDataContext dc = new LinqDataContext()) {
dc.Configurations.AddObject(this.Configuration);
dc.SaveChanges();
}
}
这将返回一些错误(我想是因为我使用的是在不同的上下文中创建的User
。无论我使用EF还是linq-to-sql,错误(和语法)都不同在这种情况下,它是The EntityKey property can only be set when the current value of the property is null.
现在,我的解决方案是每当我有一个新对象时,我只为属性而不是对象分配ID:
this.UserID = dc.User.UserID;
对于现有对象,我从新数据上下文加载旧对象,然后使用方法比较旧对象和修改对象并重新创建所有更改。 但这看起来非常愚蠢,必须有更好的方法,我不知道!!!
最好只传递原始的LinqDataContext(或创建一个静态/单一的LinqDataContext)?