实体框架3.0和帮助程序类

时间:2012-04-26 22:11:58

标签: c# .net entity-framework

我在类库中使用静态辅助类来处理诸如使用LINQ过滤某些实体之类的东西。我传递了ObjectContext和我想要过滤的参数。问题是ObjectContext被破坏了。

例如:

Users u = EntityHelper.GetUsersOfCertainAge(ObjectContext, 24);
ObjectContext.SaveChanges();

将正确填充用户列表,但程序将在ObjectContext.SaveChanges()时崩溃,即使未进行任何更改。即使在已经进行了更改的情况下,我也无法保存更改。

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

如果方法明显错误/不好或有好的替代方案,你们是否知道会导致这种腐败的原因是什么?创建一个新的上下文后缀工作,但感觉就像一个黑客。

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

public static User GetFirstUserOfCertainAge(Entities ctx, int inputAge)
{
    return ctx.Users
        .Where(x => x.Age == inputAge)
        .OrderByDescending(x => x.Created)
        .FirstOrDefault();
}

2 个答案:

答案 0 :(得分:0)

我建议使用类似这样的东西作为其清洁剂:

public static IQueriable<User> FilterByAge(this IQueriable<User> users, int inputAge)
{
    return users
        .Where(x => x.Age == inputAge)
        .OrderByDescending(x => x.Created);
}

with useage:

User u = ctx.Users.FilterByAge(24).FirstOrDefault();

就错误而言,你正在使用你正在使用的方法应该可以正常使用EF(尽管上面的内容更干净/更流畅)。我敢打赌,问题是您的上下文范围不是很正确。你可以在你获得/处理上下文的位置发帖吗?

答案 1 :(得分:0)

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