我正在使用ServiceStack ORMLite来尝试更新数据库中的记录。我的所有POCO都实现了IHasID接口
public interface IHasId
{
int Id { get; set; }
}
在我的POCO中,我有以下属性
private int id;
[ServiceStack.DataAnnotations.Alias("TableName_ID")]
public int Id
{
get { return id; }
set
{
if (value != this.id)
{
this.id = value;
NotifyPropertyChanged("Id");
}
}
}
我的每个存储库类都从DataRepositoryBase继承a< T>具有以下方法的类:
public virtual T Update(T entity)
{
using (IDbConnection db = CreateDbConnection())
{
db.Update<T>(entity, e => e.Id == entity.Id);
return entity;
}
}
当我在子存储库上调用此方法时,我收到以下错误:
System.Data.SqlClient.SqlException(0x80131904):无法更新标识列'TableName_ID'。
如何解决此错误?
我做错了什么?
谢谢!
杰里米
答案 0 :(得分:3)
您还应该使用[AutoIncrement]
标记标识列,例如:
[AutoIncrement]
[Alias("TableName_ID")]
public int Id { ... ]
答案 1 :(得分:0)
您通常不会更新身份字段,因为它们是由数据库自动生成的。在某些特定情况下,您可能需要更新标识字段,但需要使用SQL,因为它要求您在每个查询结束时使用SET语句。