gpt4 book ai didi

c# - 使用 DataContext Attach 方法更新实体时出现更新检查问题

转载 作者:行者123 更新时间:2023-11-30 12:34:12 25 4
gpt4 key购买 nike

我正在尝试在通用存储库中创建更新方法作为 LINQ to SQL 数据访问层。

我有这样一个实体:

[Table]
public class Product
{
[Column(IsPrimaryKey = true, IsDbGenerated = true,
DbType = "Int NOT NULL IDENTITY")]
public int Id { get; private set; }
[Column(UpdateCheck = UpdateCheck.Never)]
public string Name { get; set; }
....
}

我为除 id 之外的所有字段设置了 Update Check = true,正如@jeff Atwood 在 this post 中建议的那样我将附加方法中的 asModified 属性设置为 true,我在 this post 中找到了它如下:

public void Update(T entity)
{
_db.GetTable<T>().Attach(entity, true);
_db.SubmitChanges();
}

但我一直遇到同样的异常:

An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.

那么问题是什么???

除了创建时间戳列作为版本号外,您是否推荐任何其他方法在通用存储库中创建更新方法。

最佳答案

我们在 DAO 中使用了以下代码来解决同样的问题:
(例如,目前我身上没有真正的代码)

public void UpdateUser(tblUser user)
{
WriteDataContect.Attach
(
user,
ReadOnlyDataContext.tblUsers
.Select(o => o.UserId == user.UserId)
);
WriteDataContext.SubmitChanges();
}

ReadOnlyDataContext 有 TrackChanges = false;

我们无法根据我们的需要找到另一种解决方案,而无需编写大量管道代码。修改数据库以满足 LinqToSql 对timestamp 列的需求对我们来说也不是一个选择。

额外的数据库调用没有在我们的测试中造成任何问题。

关于c# - 使用 DataContext Attach 方法更新实体时出现更新检查问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com