我正在使用带有 EF 5 的 MVC 4 Code First 并尝试规范化一些数据。我将从三个实体开始,并举例说明我的两个不同场景......
用户模型
public class User
{
public int UserId { get; set; }
public string PseudoName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public Gender Gender { get; set; }
public DateTime DateOfBirth { get; set; }
// Other account related properties....
public virtual Address Address { get; set; }
public virtual Profile UserProfile { get; set; }
}
地址模型
public class Address
{
public int UserLocationId { get; set; }
public int UserId { get; set; }
// Address properties
}
轮廓模型
public class Profile
{
public int UserProfileId { get; set; }
public int UserId { get; set; }
// Specific details about the user...
}
我不太熟悉 EF 如何处理事务。通常我会创建一个这样的数据库并启动一个事务,以确保在创建用户时我可以在创建用户时创建用户、个人资料和地址记录。使用 EF 以这种方式执行此操作我必须添加用户并保存它,然后从新生成的用户中检索 userId,然后再调用两个插入并将密钥添加到地址/配置文件模型并保存它们。我对这样做感到厌倦,因为如果在此过程中出现故障,那么用户文件将不完整。现在这是我最初的做法,但不确定这在数据库方面是否可以接受,但到目前为止似乎工作正常,只需要第二个意见。
第二种情况基本上从地址和配置文件模型中删除了外键,我所做的是使用上下文创建我的用户对象,并在用户对象中创建一个新的配置文件/地址属性,然后将对象插入并保存到数据库中。DB 端发生的情况是它创建了一个没有任何 FK 的新配置文件/地址,但在 User 表中添加了 FK 作为 Profile_ProfileId、Address_AddressId。
第二个选项比第一个更有意义吗?