首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架3.0和Helper-classes

实体框架3.0和Helper-classes
EN

Stack Overflow用户
提问于 2012-04-27 06:11:58
回答 2查看 427关注 0票数 0

我在一个类库中使用静态助手类来做一些事情,比如使用LINQ过滤掉某些实体。我传递ObjectContext和我想要过滤的参数。问题是ObjectContext被破坏了。

例如:

代码语言:javascript
复制
Users u = EntityHelper.GetUsersOfCertainAge(ObjectContext, 24);
ObjectContext.SaveChanges();

用户列表将被正确填充,但程序将在ObjectContext.SaveChanges()上崩溃,即使没有进行任何更改。我根本无法保存更改,即使在已经进行了更改的情况下也是如此。

我得到了“空引用异常”和DateTime溢出等。似乎一个空对象在ObjectContext中结束,所以当我试图保存时,它违反了数据库中的所有类型的约束。我不知道为什么,我在Helper-classes中所做的就是使用LINQ过滤ObjectContext中的一些列表并返回结果。

你们知道是什么导致了这种腐败吗?如果这种方法是完全错误/糟糕的,或者是否有好的替代方案?创建一个新的上下文后记是可行的,但感觉像是一个hack。

示例(存储在单独的类库中,在静态类中):

代码语言:javascript
复制
public static User GetFirstUserOfCertainAge(Entities ctx, int inputAge)
{
    return ctx.Users
        .Where(x => x.Age == inputAge)
        .OrderByDescending(x => x.Created)
        .FirstOrDefault();
}
EN

回答 2

Stack Overflow用户

发布于 2012-04-27 07:15:45

我建议使用这样的东西作为它的清洁器的替代:

代码语言:javascript
复制
public static IQueriable<User> FilterByAge(this IQueriable<User> users, int inputAge)
{
    return users
        .Where(x => x.Age == inputAge)
        .OrderByDescending(x => x.Created);
}

使用:

代码语言:javascript
复制
User u = ctx.Users.FilterByAge(24).FirstOrDefault();

就错误而言,你当前使用的方法应该在EF下工作得很好(尽管上面的方法更干净/更流畅)。我敢打赌,问题是你的上下文范围不太正确。你能把你获取/处理上下文的地方也贴出来吗?

票数 0
EN

Stack Overflow用户

发布于 2012-04-28 01:45:58

问题是我创建了一个测试用户,其中一个测试用户的复杂属性是从ObjectContext中获取的,这显然会导致这个测试用户间接地也属于ObjectContext (有点奇怪)。当我保存时,它也会尝试保存这个测试用户。无论如何,确保在这个测试用户属性中没有设置任何与ObjectContext相关的复杂类型就解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10342145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档