私は、この問題の正確な技術仕様に関して私にはわかりませんが、単純な言葉で、エンティティを保存するためのラッパー/拡張メソッドを作成しようとしています。EntityObject to DbContext
私はプロジェクトに新しいエンティティデータモデル(.edmx)ファイルを追加しました。それはthis-
public partial class SUContextContainer : DbContext
{
public SUContextContainer()
: base("name=SUContextContainer")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Category> Categories { get; set; }
public DbSet<Gallery> Galleries { get; set; }
public DbSet<SuperUser> SuperUsers { get; set; }
public DbSet<UserType> UserTypes { get; set; }
}
今ここに私のようなデータベース操作のための拡張メソッドにこれをラップしようとしています(ETC更新、削除、保存...)
のように私はそれを作成しようとしたDbSet(複数可)を生成しますas-
public static void Save(this EntityObject objEntity)
{
try // Update Record
{
((IObjectContextAdapter)Global.Context).ObjectContext.ObjectStateManager.ChangeObjectState(objEntity, EntityState.Modified);
Global.Context.SaveChanges();
}
catch (OptimisticConcurrencyException) // Insert Record
{
((IObjectContextAdapter)Global.Context).ObjectContext.ObjectStateManager.ChangeObjectState(objEntity, EntityState.Added);
Global.Context.SaveChanges();
}
}
このメソッドは、EntityObject型に関連付けられています。それが生成する.edmxコードはDbContext型です。
だから私はこのヘルパーメソッドでいくつかのエンティティを保存しようとすると、決して見つけ出しません。
var galleryEntity = new Gallery {
IsActive = true,
CategoryId = model.CategoryId,
};
galleryEntity.Save(); // the save method is not found.
私はに変更する方法の上にしようとした -
public static void Save(this DbSet objEntity)
しかし、これはまた、拡張メソッドとして反映されません。 私は間違っています。
ギャラリーはEntityObjectを継承していますが、ソースファイルにusingステートメントを追加しましたか? –
@GlenThomas、いいえ、EntityObjectから継承しません。ソースファイルを使って追加しました。 1分以内に情報源を追加しましょう。 – Manoj
グローバル(静的)コンテキストを使用しているようです。それはお勧めできません。さらに、この拡張方法は意味をなさない。それが何であれ、 'EntityObject'だけが保存されます。それは、*変更されていない各エンティティを保存します。また、なぜ 'DbSet'を入力したのか理解できず、' EntityObject'の拡張メソッドが実行されることを期待しています。 –