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 操作を機能させるために 3 つの方法を試しました。最初の 2 つの方法でエラーが発生しました。
最初の方法 (動作しません):
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.
--
2 番目の方法 (機能しません):
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;
}
--
編集操作はエラーなく動作しますが、追加操作にはいくつかのトリックが必要です。通常の追加操作の問題は何ですか? また、それを機能させる方法はありますか?
@Mladen Macanović のアドバイスを試しIdentity
、ベース BaseEntity クラスの主キーに属性を追加したところ、int タイプの主キーを持つエンティティで上記のエラーが発生しました。
上記のエラーは、int 型の主キーを持つエンティティで発生しました。
public class BaseEntity<T>
{
[PrimaryKey Identity]
public T Id { get; set; }
}
しかし、これは完全な解決策ではありません。私のエンティティの一部は主キーのタイプが Guidであるため、それらに属性を追加Identity
すると別のエラーが発生するためです。
InsertBatch メソッドは、Identity 属性を使用せずに機能します。そのため、Identity 列の BaseEntity クラスの Identity 属性を使用せずにデータを追加できます。insertbatch メソッドの違いは何ですか? InsertBatch
メソッドを使用せずに上記のエラーを解決するにはどうすればよいですか?