Asp.net mvc 4 BlToolkit在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<

我正在asp.NETMVC项目中使用BaseRepository。编辑操作工作,但在添加操作,我应该使一个技巧,使其工作。具体而言,我的基本存储库和基本实体类:

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