我正在尝试在通用存储库中创建一个更新方法作为 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; }
....
}
I set Update Check = true
对于除 id 之外的所有字段,正如 @jeff Atwood 建议的那样这个帖子 https://stackoverflow.com/questions/330053/how-much-overhead-does-update-check-have-for-linq-updates我设置了asModified
我在中找到的附加方法中的属性为 true这个帖子 https://stackoverflow.com/questions/536400/entity-attachment-issues-in-linq如下:
public void Update(T entity)
{
_db.GetTable<T>().Attach(entity, true);
_db.SubmitChanges();
}
但我不断收到相同的异常:
一个实体只能在没有原始状态的情况下附加修改后的状态,如果
它声明版本成员或没有更新检查策略。
所以有什么问题 ???
除了创建时间戳列作为版本号之外,您是否建议使用任何其他方法在通用存储库中创建更新方法。
我们在 DAO 中使用以下代码来解决同样的问题:
(例如,目前我身上没有真正的代码)
public void UpdateUser(tblUser user)
{
WriteDataContect.Attach
(
user,
ReadOnlyDataContext.tblUsers
.Select(o => o.UserId == user.UserId)
);
WriteDataContext.SubmitChanges();
}
ReadOnlyDataContext 具有 TrackChanges = false;
我们无法根据我们的需求找到另一种解决方案,而不必编写大量的管道代码。
修改数据库以满足 LinqToSql 的需要时间戳专栏对我们来说也不是一个选择。
在我们的测试中,额外的数据库调用没有造成任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)