2016-05-12 16 views
0

MySQLサーバーでEF6/LINQを使用しています。 DataTableを使ってエンティティのバインディングリストにバインドされたDataGridViewがあります。すべてが正常に動作し、レコードを削除することさえできます。しかし、まだデータベースに入っていないレコードは挿入できません。EF6/LINQ MySQL - 挿入されません

これは、データベースからレコードを選択し、SaveChanges()を削除してから再び挿入したときに、再度挿入されるということです。しかし、もし私が元に挿入しようとすると。新しいtcompanyaddress()、そのプロパティを設定し、それを挿入しますか?動作しません。

究極の目標は、DB内のCompanyID FKに関連付けられたすべてのアドレスをクリアしてトランザクションをエミュレートし、その後、BindingListから最新の編集済みアドレスを再挿入することです。再び、それは動作します...しかし、新しいエントリではありません。

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(); 
} 

答えて

0

解決は簡単でした。私はBindingListに新しいアドレスを追加したときにCompanyID FKを設定していなかったことがわかりました。

関連する問題