【发布时间】:2011-02-18 08:17:42
【问题描述】:
我需要 CTP5 的添加或更新模式。 假设模型:
public class User
{
public int UserId { get; set; }
public ICollection<Address> Addresses { get; set; }
}
public class Address
{
public int AddressID { get; set; }
public string Location { get; set; }
}
如果我添加一个新用户,相应的地址表也会被填充。 但是如果用户已经在数据库中,我会得到一个 DbUpdateException。在这种情况下,我希望使用新数据更新数据库中的数据。我该怎么做?
数据库中的数据
表地址
地址ID位置
1 约翰广场
2 玛丽广场
3 吉米广场
我更新的用户在地址集合 1 中具有 AddressId:2, Location=GeorgePlace。 但是对于 ID=2,在 Db 中已经有一条 location=MarryPlace 的记录。我希望 GeorgePlace 覆盖 MarryPlace。
我不能拥有未分配给用户的地址
我创建了一个类似的用户:
var user=new User();
user.Id=GetUserIDfromService();
foreach(var address in GetAddressesFromService(user.Id)){
user.Addresses.Add(address);
}
context.Users.Add(user);
context.SaveChanges();//this may throw an exception, because there is already a user with this id.
【问题讨论】:
-
@Ryan:所以您可以在数据库中拥有未分配给任何用户的地址?您也可以发布您的更新代码吗?
-
我会做 Jakub Konecki 建议的事情。但我希望能够做一些类似 context.Users.Add(newUser); context.SaveChanges()
-
@Ryan:发布您的代码。我们需要知道您是如何接收/创建您想要更新的用户和地址对象以及您的实际更新方法。
-
@Ryan:GetAddressFromService 在做什么?是否从其他上下文实例的数据库中加载地址?
-
不,它从网络服务获取数据
标签: c# entity-framework entity-framework-ctp5