0

我在类库中使用静态帮助程序类,例如使用 LINQ 过滤掉某些实体。我传递了 ObjectContext 和我想要过滤的参数。问题是 ObjectContext 被破坏了。

例如:

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

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

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

你们知道什么可能导致这种腐败,如果方法完全错误/坏或者是否有好的选择?创建一个新的上下文后记是可行的,但感觉就像一个黑客。

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

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

2 回答 2

0

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

于 2012-04-27T17:45:58.390 回答
0

我建议使用这样的东西作为其清洁剂的替代品:

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

用途:

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

就错误而言,您当前使用的方法应该可以与 EF 一起正常工作(尽管上面的内容更干净/流畅)。我敢打赌,问题在于您的上下文范围不太正确。您能否也发布获取/处理上下文的位?

于 2012-04-26T23:15:45.280 回答