添加 2 linked EntityFramework 对象不会 link
Adding 2 linked EntityFramework objects doesn't link
我的 EntityFramework 6.1.1 模型中有两个实体,它们由支持 SQL 数据库中的外键 link 编辑。我有一个包含地址详细信息的 Location 实体和一个包含名称详细信息和 Location 的可为空外键 ID 的 Client 实体。
我正在构建我的第一个 MVC 站点,但使用 EntityFramework 超过 6 年,构建 Microsoft 系统也超过 10 年。下面的行为对我来说毫无意义...
我的 Create 方法中的以下代码应该有效:
Location location = new Location { LocationID = cvm.Location.LocationID, LocationTypeID = cvm.Location.LocationTypeID, LocationData = string.Empty };
db.Locations.Add(location);
Client client = new Client { ClientID = cvm.ClientID, ClientTypeID = cvm.ClientTypeID, Email = cvm.Email, PhoneNumber = cvm.PhoneNumber, ESign = cvm.ESign, ClientData = string.Empty };
db.Clients.Add(client);
client.Location = location;
db.SaveChanges();
不幸的是,调用 SaveChanges 后的结果是两个实体都被插入到各自的数据库 tables 中,但是客户端 table 中的外键为空!我已经尝试在客户端实体中手动设置 LocationID 属性,但它没有任何变化。我试过在添加客户实体之前保存位置实体,但它没有任何改变。我能让 link 工作的唯一方法是使用以下代码:
Location location = new Location { LocationID = cvm.Location.LocationID, LocationTypeID = cvm.Location.LocationTypeID, LocationData = string.Empty };
db.Locations.Add(location);
Client client = new Client { ClientID = cvm.ClientID, ClientTypeID = cvm.ClientTypeID, Email = cvm.Email, PhoneNumber = cvm.PhoneNumber, ESign = cvm.ESign, ClientData = string.Empty };
db.Clients.Add(client);
db.SaveChanges();
client.Location = location;
db.Entry(client).State = EntityState.Modified;
db.SaveChanges();
最令人沮丧的部分是我有另一个实体 (属性),它也有一个指向 Location 实体的外键 link。在 属性 table 但是 LocationID 外键不可为空,并且(等效的)第一个代码确实有效。
有其他人 运行 解决过这个问题并且可以解释为什么第一个代码不起作用吗?这可能是 EF6.1.1 错误吗?
您不必明确保存 child(位置)
Location location = new Location { LocationID = cvm.Location.LocationID, LocationTypeID = cvm.Location.LocationTypeID, LocationData = string.Empty };
Client client = new Client { ClientID = cvm.ClientID, ClientTypeID = cvm.ClientTypeID, Email = cvm.Email, PhoneNumber = cvm.PhoneNumber, ESign = cvm.ESign, ClientData = string.Empty };
client.Location = location;
db.Clients.Add(client);
db.SaveChanges();
我的 EntityFramework 6.1.1 模型中有两个实体,它们由支持 SQL 数据库中的外键 link 编辑。我有一个包含地址详细信息的 Location 实体和一个包含名称详细信息和 Location 的可为空外键 ID 的 Client 实体。
我正在构建我的第一个 MVC 站点,但使用 EntityFramework 超过 6 年,构建 Microsoft 系统也超过 10 年。下面的行为对我来说毫无意义...
我的 Create 方法中的以下代码应该有效:
Location location = new Location { LocationID = cvm.Location.LocationID, LocationTypeID = cvm.Location.LocationTypeID, LocationData = string.Empty };
db.Locations.Add(location);
Client client = new Client { ClientID = cvm.ClientID, ClientTypeID = cvm.ClientTypeID, Email = cvm.Email, PhoneNumber = cvm.PhoneNumber, ESign = cvm.ESign, ClientData = string.Empty };
db.Clients.Add(client);
client.Location = location;
db.SaveChanges();
不幸的是,调用 SaveChanges 后的结果是两个实体都被插入到各自的数据库 tables 中,但是客户端 table 中的外键为空!我已经尝试在客户端实体中手动设置 LocationID 属性,但它没有任何变化。我试过在添加客户实体之前保存位置实体,但它没有任何改变。我能让 link 工作的唯一方法是使用以下代码:
Location location = new Location { LocationID = cvm.Location.LocationID, LocationTypeID = cvm.Location.LocationTypeID, LocationData = string.Empty };
db.Locations.Add(location);
Client client = new Client { ClientID = cvm.ClientID, ClientTypeID = cvm.ClientTypeID, Email = cvm.Email, PhoneNumber = cvm.PhoneNumber, ESign = cvm.ESign, ClientData = string.Empty };
db.Clients.Add(client);
db.SaveChanges();
client.Location = location;
db.Entry(client).State = EntityState.Modified;
db.SaveChanges();
最令人沮丧的部分是我有另一个实体 (属性),它也有一个指向 Location 实体的外键 link。在 属性 table 但是 LocationID 外键不可为空,并且(等效的)第一个代码确实有效。
有其他人 运行 解决过这个问题并且可以解释为什么第一个代码不起作用吗?这可能是 EF6.1.1 错误吗?
您不必明确保存 child(位置)
Location location = new Location { LocationID = cvm.Location.LocationID, LocationTypeID = cvm.Location.LocationTypeID, LocationData = string.Empty };
Client client = new Client { ClientID = cvm.ClientID, ClientTypeID = cvm.ClientTypeID, Email = cvm.Email, PhoneNumber = cvm.PhoneNumber, ESign = cvm.ESign, ClientData = string.Empty };
client.Location = location;
db.Clients.Add(client);
db.SaveChanges();