2016-05-12 9 views
0

Verwenden von EF6/LINQ mit einem MySQL-Server. Ich habe eine DataGridView gebunden an eine BindingList von Entitäten mit einem DataTable. Alles funktioniert gut, sogar Datensätze löschen. Ich kann jedoch keine Datensätze einfügen, die noch nicht in der Datenbank vorhanden sind.EF6/LINQ MySQL - Wird nicht eingefügt

Was ich damit meine ist, dass, wenn ich einen Datensatz aus der Datenbank auswählen, löschen Sie es, SaveChanges(), und fügen Sie es erneut ein, es fügt sich wieder ein! Aber wenn ich versuche, ex einzufügen. new tcompanyaddress(), seine Eigenschaften festlegen und einfügen? Funktioniert nicht.

Das ultimative Ziel besteht darin, eine Transaktion zu emulieren, die alle mit einer CompanyID FK verknüpften Adressen in der Datenbank löscht, und dann einfach die aktuellsten bearbeiteten Adressen aus der BindingList neu einfügt. Wieder funktioniert es ... aber nicht auf neue Einträge.

using (JobTrackerEntities context = new JobTrackerEntities()) 
{ 
    context.Database.Connection.ConnectionString += ";password=orbitman1;"; 
    // Update main profile 
    tcompany companyRow = context.tcompany.Find(Company.CompanyID); 
    companyRow.CompanyName = Company.CompanyName; 
    // Update foreign profiles 
    var addresses = from address in context.tcompanyaddress // Retreive all addresses that were removed 
        where address.CompanyID == Company.CompanyID 
        select address; 
    // Clear existing addresses 
    foreach (tcompanyaddress address in addresses) 
    { 
     Console.WriteLine("Remove " + address.LocationName); 
     context.Entry(address).State = EntityState.Deleted; 
    } 
    addresses = from address in context.tcompanyaddress // Retreive all addresses that were removed 
       where address.CompanyID == Company.CompanyID 
       select address; 
    Console.WriteLine("After clear: " + addresses.Count()); 
    // Replace with new addresses 
    foreach (tcompanyaddress address in CompanyAddresses) 
    { 
     Console.WriteLine("Add " + address.LocationName); 
     context.tcompanyaddress.Add(address); 
    } 
    // Commit transaction 
    context.SaveChanges(); 
    addresses = from address in context.tcompanyaddress // Retreive all addresses that were removed 
       where address.CompanyID == Company.CompanyID 
       select address; 
    Console.WriteLine("After add: " + addresses.Count()); 

    RefreshProfileForm(); 
} 

Antwort

0

Lösung war einfach. Es stellte sich heraus, dass ich die CompanyID FK nicht setzte, als ich der BindingList eine neue Adresse hinzufügte, was bedeutete, dass die Abfrage sie nie auswählte.

Verwandte Themen