[英]Changing a relationship / foreign key in Entity Framework - not being persisted
Ive遵循模型视图ViewModel模式,使用实体框架与SQL 2008数据库进行交互,得到了一个WPF应用程序。
问题 :
我的问题是我无法使用EF更改数据库中的外键值。 我有两个实体:站点和密钥。 一个站点上可以有许多密钥。 我想将密钥从一个站点移动到另一个站点。 我正在尝试使用以下代码执行此操作:
keyToMove.Site = newSite;
dataAccess.SaveChanges(); // this method just does: this.entities.SaveChanges();
我观察到的
它出现在内存中,一切正常,因为应用程序的其余部分反映了此更改(密钥将出现在新站点下)。 但是,数据库中的外键不会更改,并且在关闭并重新启动应用程序后,所有更改都会丢失。
在“ keyToMove.Site = newSite;”之后,keyToMove,newSite和旧的Site实例都具有EntityState值“ Unchanged”,这是不正确的。 SaveChanges也返回2,这让我更加困惑。
“站点”属性的setter实现与模型中的其他导航属性类似:
set
{
((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Site>("CmsModel.SiteKeyAssociation", "Site").Value = value;
}
SQL Profiler显示没有类似于UPDATE的内容发送到db引擎,只有非常长的SELECT。
可能会产生影响的事物
“键”实体基于应用于列之一的条件从另一个实体继承。
我正在使用AutoFac IOC容器来提供想要进行某些数据访问的任何ViewModel,这些ViewModel都引用了我的数据访问类的实例(示例中为“ dataAccess”)。
ObjectContext实例是此类的成员(在注释中显示为“ this.entities”)。
dataAccess实例是Singleton范围的,因此“ keyToMove”和“ newSite”都将附加到同一上下文的视图模型之间只能共享一个实例。
很抱歉,这篇文章的长度,但是我真的不知道这里发生了什么,并且我试图提供尽可能多的细节,可能会有所帮助。 请询问是否还有其他信息会有所帮助。
提前致谢。
我正在自学实体框架的过程,因此我可能遗漏了您的问题,当然也不是专家。 但是,话虽如此,您可能会遇到我不得不自己解决的问题。
您没有将代码发布到创建“ newSite”变量的位置,但是在EF中设置外键时,您所做的操作与在Linq中或在数据库中进行操作时有所不同。 使用EF,您必须选择要在对象上设置的IN外键值,然后再对其进行设置。
这将不起作用:
NewSite = Site.CreateSite("PrimaryKeyValue");
keyToMove.Site = NewSite;
相反,您可以执行以下操作:
NewSite = MyEntities.Site.Where(site=>site.PrimaryKey==PrimaryKeyValue)
.FirstOrDefault();
keyToMove.Site = NewSite;
希望我能理解您的问题!
问候,迈克
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.