【问题标题】:EF6/LINQ MySQL - Won't InsertEF6/LINQ MySQL - 不会插入
【发布时间】:2016-05-12 18:10:01
【问题描述】:

在 MySQL 服务器上使用 EF6/LINQ。我有一个使用 DataTable 绑定到实体 BindingList 的 DataGridView。一切正常,甚至删除记录。但我无法插入尚未在数据库中的记录。

我的意思是,如果我从数据库中选择一条记录,然后删除它,SaveChanges(),然后重新插入它,它会重新插入它自己!但是,如果我尝试插入 ex。 new tcompanyaddress(),设置它的属性,然后插入它?没用。

最终目标是模拟一个事务,清除数据库中与 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();
}

【问题讨论】:

    标签: c# mysql linq entity-framework-6


    【解决方案1】:

    解决方案很简单。当我向 BindingList 添加新地址时,我没有设置 CompanyID FK,这意味着查询永远不会选择它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      相关资源
      最近更新 更多