Asp.net mvc 4 BlToolkit在BaseRepository类中插入数据失败
我正在asp.NETMVC项目中使用BaseRepository。编辑操作工作,但在添加操作,我应该使一个技巧,使其工作。具体而言,我的基本存储库和基本实体类:Asp.net mvc 4 BlToolkit在BaseRepository类中插入数据失败,asp.net-mvc-4,repository-pattern,bltoolkit,Asp.net Mvc 4,Repository Pattern,Bltoolkit,我正在asp.NETMVC项目中使用BaseRepository。编辑操作工作,但在添加操作,我应该使一个技巧,使其工作。具体而言,我的基本存储库和基本实体类: public class BaseRepository<TEntity, T> : IRepository<TEntity, T> where TEntity : BaseEntity<T> { private DbManager _context; private Table<
public class BaseRepository<TEntity, T> : IRepository<TEntity, T> where TEntity : BaseEntity<T>
{
private DbManager _context;
private Table<TEntity> Table
{
get { return _context.GetTable<TEntity>(); }
}
public BaseRepository(DbManager context)
{
_context = context;
}
//...
public TEntity Add(TEntity entity)
{
//...
return entity;
}
public TEntity Edit(TEntity entity)
{
_context.Update(entity);
return entity;
}
//...
}
public class BaseEntity<T>
{
[PrimaryKey]
public T Id { get; set; }
}
错误消息:
当identity\U insert设置为OFF时,无法在表“…”中插入标识列的显式值。
--
第二种方式(不起作用):
public TEntity Add(TEntity entity)
{
_context.Insert(entity);
return entity;
}
public TEntity Add(TEntity entity)
{
Table.Insert(() => entity);
return entity;
}
public TEntity Add(TEntity entity)
{
var l = new List<TEntity> { entity };
_context.InsertBatch(l);
return entity;
}
public class BaseEntity<T>
{
[PrimaryKey Identity]
public T Id { get; set; }
}
错误消息:
由于对象的当前状态,操作无效。
--
第三种方式(工作):
public TEntity Add(TEntity entity)
{
_context.Insert(entity);
return entity;
}
public TEntity Add(TEntity entity)
{
Table.Insert(() => entity);
return entity;
}
public TEntity Add(TEntity entity)
{
var l = new List<TEntity> { entity };
_context.InsertBatch(l);
return entity;
}
public class BaseEntity<T>
{
[PrimaryKey Identity]
public T Id { get; set; }
}
但是,这不是一个完整的解决方案,因为,我的某些实体的主键类型为Guid,因此向它们添加标识
属性会产生另一个错误
InsertBatch方法不使用Identity属性即可工作。因此,您可以在Identity列的BaseEntity类中添加数据,而无需使用Identity属性。insertbatch方法的区别是什么?如果不使用
InsertBatch
方法,如何解决上面显示的错误?问题在于数据库表。这就是为什么会出现标识插入错误。转到SQL Server Management Studio,右键单击表Design,并为主键列设置属性标识规范->(Is标识)为Yes