首页 > 其他 > 详细

实战EntityFramework

时间:2014-02-20 16:01:54      阅读:324      评论:0      收藏:0      [点我收藏+]

删除对象一定要在同一个context

我尝试这在两个方法中使用两个context(Container)实例来进行一个获得一个删除,结果我获得的”The object cannot be deleted because it was not found in the ObjectStateManager“错误;后来尝试在一个方法体中共享一个容器,正常删除;所以删除一定要在同一个容器中来进行处理,因为delete本身是将Entity的状态设置为删除,前提是容器中已经装载了改实体;实体的装载是发生在一次”GetObjectByID“之类的Get操作之后,所以一个新建的容器,直接处理之前别的容器获得Entity,当然找不到了。所以对于封装容器操作,最好做一个全局的容器,这样比较有意义,少new很多实例,而且可以保证行为一致性。

EntityKey

检索对象,少不了EntityKey,一下是代码:

IEnumerable<KeyValuePair<string, object>> entityKeyValues = new KeyValuePair<string, object>[] 
{
    new KeyValuePair<string, object>("Id", pID) 
};
string[] names = pEntity.GetType().ToString().Split(‘.‘);
string entitySetName = "Model1Container." + names[names.Length - 1];
Model1Container context = new Model1Container();
EntityKey key = new EntityKey(entitySetName, entityKeyValues);
object obj = context.GetObjectByKey(key);

enttiySetName是亮点,如何来确定他的值呢?看容器定义文件

public Model1Container() : base("name=Model1Container", "Model1Container")
默认实例传送的”defaultContainerName“就是”Model1Container“,然后,实体集的名字就是容器的名称+类名;

实战EntityFramework

原文:http://www.cnblogs.com/xiashiwendao/p/3556839.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!