Fügen Sie Daten mit dem Entity Framework-Modell ein

88

Ich versuche, einige Daten mithilfe des Entity Framework-Modells in meine Datenbank einzufügen, aber aus unbekannten Gründen führt dies zu nichts.

Vermisse ich hier etwas?

using (var context = new DatabaseEntities())
{
    var t = new test
    {
        ID = Guid.NewGuid(),
        name = "blah",
    };
    context.AddTotest(t);
    context.SaveChanges();
}
Rocshy
quelle
Versuchen Sie 'SaveChanges (System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);'
Willem
5
Code zuerst? Modell zuerst? Bricht es oder speichert es einfach nichts? Was sagt SQL Profiler? Wird überhaupt etwas an die Datenbank gesendet?
Dennis Traub

Antworten:

115

Es sollte sein:

context.TableName.AddObject(TableEntityInstance);

Wo:

  1. TableName: Der Name der Tabelle in der Datenbank.
  2. TableEntityInstance: Eine Instanz der Tabellenentitätsklasse.

Wenn Ihr Tisch ist Orders, dann:

Order order = new Order();
context.Orders.AddObject(order);

Beispielsweise:

 var id = Guid.NewGuid();

 // insert
 using (var db = new EfContext("name=EfSample"))
 {
    var customers = db.Set<Customer>();
    customers.Add( new Customer { CustomerId = id, Name = "John Doe" } );

    db.SaveChanges();
 }

Hier ist ein Live-Beispiel:

public void UpdatePlayerScreen(byte[] imageBytes, string installationKey)
{
  var player = (from p in this.ObjectContext.Players where p.InstallationKey == installationKey select p).FirstOrDefault();

  var current = (from d in this.ObjectContext.Screenshots where d.PlayerID == player.ID select d).FirstOrDefault();

  if (current != null)
  {
    current.Screen = imageBytes;
    current.Refreshed = DateTime.Now;

    this.ObjectContext.SaveChanges();
  }
  else
  {
    Screenshot screenshot = new Screenshot();

    screenshot.ID = Guid.NewGuid();
    screenshot.Interval = 1000;
    screenshot.IsTurnedOn = true;
    screenshot.PlayerID = player.ID;
    screenshot.Refreshed = DateTime.Now;
    screenshot.Screen = imageBytes;

    this.ObjectContext.Screenshots.AddObject(screenshot);
    this.ObjectContext.SaveChanges();
  }
}
Entwickler
quelle
1
Ich habe keine AddObject-Methode.
Rocshy
@ Tennis Traub hat dich nach deinem Model gefragt. Bitte geben Sie weitere Informationen dazu.
Entwickler
28
Verwenden Sie .Add anstelle von .AddObject
Dale Fraser
9
Auf EF 6 würden Sie .Add anstelle von .AddObject
David
1
Fantastische Antwort!
Vielen
40
var context = new DatabaseEntities();

var t = new test //Make sure you have a table called test in DB
{
    ID = Guid.NewGuid(),
    name = "blah",
};

context.test.Add(t);
context.SaveChanges();

Sollte es tun

Nawed Nabi Zada
quelle
7

[HttpPost] // wird verwendet, wenn Sie Logik für ein Schaltflächenklickereignis schreiben

public ActionResult DemoInsert(EmployeeModel emp)
{
    Employee emptbl = new Employee();    // make object of table
    emptbl.EmpName = emp.EmpName;
    emptbl.EmpAddress = emp.EmpAddress;  // add if any field you want insert
    dbc.Employees.Add(emptbl);           // pass the table object 
    dbc.SaveChanges();

    return View();
}
Sanket Parikh
quelle
Wenn Sie Fragen haben, fragen Sie mich
Sanket Parikh
3

Ich benutze EF6 und finde etwas Seltsames.

Angenommen, der Kunde hat einen Konstruktor mit Parameter.

wenn ich benutze new Customer(id, "name")und tue

 using (var db = new EfContext("name=EfSample"))
 {
    db.Customers.Add( new Customer(id, "name") );
    db.SaveChanges();
 }

Es läuft fehlerfrei durch, aber wenn ich in die Datenbank schaue, stelle ich tatsächlich fest, dass die Daten NICHT eingefügt werden.

Aber wenn ich die geschweiften Klammern hinzufüge, benutze new Customer(id, "name"){}und mache

 using (var db = new EfContext("name=EfSample"))
 {
    db.Customers.Add( new Customer(id, "name"){} );
    db.SaveChanges();
 }

Die Daten werden dann tatsächlich eingefügt.

Anscheinend machen die geschweiften Klammern den Unterschied. Ich denke, dass das Entity Framework nur beim Hinzufügen von geschweiften Klammern erkennt, dass es sich um echte konkrete Daten handelt.

Yu Yang Jian
quelle