Ich bin mir nicht sicher in Bezug auf die genaue technische Spezifikation für dieses Problem, aber in einfachen Worten versuche ich eine Wrapper/Extension-Methode um meine Entitäten zu speichern.EntityObject zu DbContext
Also habe ich eine neue Entity Data Model (.edmx) Datei zu meinem Projekt hinzugefügt. Das erzeugt DbSet (n) wie 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; }
}
Hier versuche ich, diese in eine Erweiterungsmethode umhüllen für Datenbankoperationen wie (speichern, löschen, aktualisieren etc ..)
habe ich versucht, es zu schaffen 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();
}
}
Diese Methode ist an EntityObject-Typen angehängt. Wo .edmx-Code, den es generiert, sind vom Typ DbContext.
Also immer wenn ich versuche, irgendeine Entität mit dieser Hilfsmethode zu speichern, findet es nie heraus.
var galleryEntity = new Gallery {
IsActive = true,
CategoryId = model.CategoryId,
};
galleryEntity.Save(); // the save method is not found.
ich oben Methode versuchte sich ändern -
public static void Save(this DbSet objEntity)
Aber das scheint auch nicht als Erweiterungsmethode zu nehmen. Was mache ich falsch?
Erbt Gallery von EntityObject und haben Sie eine using-Anweisung zur Quelldatei hinzugefügt? –
@GlenThomas, Nein, erbt nicht von EntityObject. Ich habe mit der Quelldatei hinzugefügt. Lassen Sie mich innerhalb einer Minute eine Quelle hinzufügen. – Manoj
Es scheint, dass Sie einen globalen (statischen) Kontext verwenden. Das ist nicht zu empfehlen. Außerdem ist diese Erweiterungsmethode nicht sinnvoll. Was auch immer es tut, es * nie * speichert nur das 'EntityObject'. Es speichert * jede * angehängte Entität, die nicht "Unverändert" ist. Außerdem verstehe ich nicht, warum Sie ein 'DbSet' eingeben und dann erwarten, dass eine Erweiterungsmethode für' EntityObject' ausgeführt wird. –