我不確定這個問題的確切技術規範對我來說,但簡單地說,我想創建一個包裝/擴展方法來保存我的實體。EntityObject to DbContext
因此,我添加了新的實體數據模型(.edmx)文件到我的項目。像這個 -
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; }
}
產生DbSet(S)現在我在這裏試圖總結成一個擴展方法對於像數據庫操作(保存,刪除,更新等)
我嘗試創建它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)
但是,這也似乎並沒有採取如擴展方法。 我在做什麼錯。
Gallery是否從EntityObject繼承,並且是否已將使用語句添加到源文件? –
@GlenThomas,不,它不會從EntityObject繼承。我已經添加使用源文件。讓我在一分鐘內添加源代碼。 – Manoj
看來你使用全局(靜態)上下文。這不建議。此外,這種擴展方法沒有意義。不管它做什麼,它*永遠不會*只保存'EntityObject'。它可以保存*不是'不變'的每個*附屬實體。另外,我不明白你爲什麼輸入'DbSet',然後期望執行'EntityObject'的擴展方法。 –