BlToolkit在BaseRepository类中插入数据失败



我在asp.Net MVC项目中使用BaseRepository。编辑操作是有效的,但在添加操作中,我应该做一个技巧来让它工作。详细地说,我的基本存储库和BaseEntity类:

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; }
    }

我尝试了三种方法来实现Add操作。前两种方法都会出错。

第一种方式(不起作用):

public TEntity Add(TEntity entity)
    {
        _context.Insert(entity);            
        return entity;
    }

错误消息:Cannot insert explicit value for identity column in table '...' when IDENTITY_INSERT is set to OFF.

--

第二种方式(不起作用):

public TEntity Add(TEntity entity)
    {
        Table.Insert(() => entity);          
        return entity;
    }

错误消息:Operation is not valid due to the current state of the object.

--

第三种方式(工作):

public TEntity Add(TEntity entity)
    {
        var l = new List<TEntity> { entity };
        _context.InsertBatch(l);            
        return entity;
    }

--

编辑操作可以正常工作,但对于添加操作,我需要做一些技巧。正常的Add操作有什么问题?有没有办法让它正常工作

我尝试了@Mladen Macanović的建议,并在BaseEntity基类的主键中添加了Identity属性,,然后对于具有int类型主键的实体,上面显示的错误消失了

对于具有int类型主键的实体,上面显示的错误消失了:

public class BaseEntity<T>
    {
        [PrimaryKey Identity]
        public T Id { get; set; }
    }

但是,这不是一个完整的解决方案,因为我的一些实体的主键类型为Guid,所以向它们添加Identity属性会导致另一个错误。

InsertBatch方法在不使用Identity属性的情况下工作因此,您可以在不使用"标识"列的BaseEntity类中的"标识"属性的情况下添加数据。insertbatch方法有什么区别?如何在不使用InsertBatch方法的情况下解决上面显示的错误?

问题出在数据库表上。这就是您得到IDENTITY_INSERT错误的原因。转到SQL Server Management Studio,右键单击表"设计",并将主键列的属性"标识规范->(Is Identity)"设置为"是"。

最新更新