我的EntityFramework 6.1.1模型中有两个实体,它们由后备SQL数据库中的外键链接。我有一个包含地址详细信息的Location实体,我有一个Client实体,其中包含名称详细信息和可用于位置的外键ID。
我正在构建我的第一个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之后的结果是两个实体都插入到它们各自的数据库表中但是Client表中的外键是null!我尝试在客户端实体中手动设置LocationID属性,但不做任何更改。我已经尝试在添加客户端实体之前保存位置实体,但它没有做任何更改。我可以获得链接工作的唯一方法是使用以下代码:
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();
最令人沮丧的是我有另一个实体(Property),它也有一个到Location实体的外键链接。但是在Property表中,LocationID外键不可为空,并且(等效的)第一个代码可以正常工作。
有没有其他人遇到过这个问题,可以解释为什么第一个代码不起作用?这可能是EF6.1.1错误吗?
答案 0 :(得分:0)
您不必明确保存孩子(位置)
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();