请原谅标题,因为我不确定正确描述问题所需的措辞。
我有一个客户表,一个电子邮件地址表,一个电子邮件地址类型表和匹配的模型。
客户表
CustomerId,名字,姓氏电子邮件地址表
EmailAddressId,EmailAddress,EmailAddressType,CustomerId
EmailAddressType表
EmailAddressTypeId,Description
我想在我的客户模型中添加属性“主电子邮件”,“辅助电子邮件”,“第三电子邮件”地址,但在确定如何正确编码时存在问题。
我确实意识到我想要做的事情不符合数据库中表格的关系类型。这是临时解决方案的业务需求,直到我们可以重新编写所有这些逻辑。
答案 0 :(得分:1)
这是我的解决方案:跳过EmailAddressType表,我假设二级和三级电子邮件地址是可选的,主电子邮件是必填字段。 Customer表和EmailAddress表之间的关系在OnModelCreating方法中配置。
public class Customer
{
public int CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual EmailAddress PrimaryAddress { get; set; }
public virtual EmailAddress SecondaryAddress { get; set; }
public virtual EmailAddress TeritaryAddress { get; set; }
}
public class EmailAddress
{
public int EmailAddressId { get; set; }
public string Address { get; set; }
}
public class ShoppingDb : DbContext
{
public DbSet<Customer> Customers { get; set; }
public DbSet<EmailAddress> Addresses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var customerEntity= modelBuilder.Entity<Customer>();
customerEntity.HasKey(c => c.CustomerId);
customerEntity.Property(c => c.FirstName).HasMaxLength(50);
customerEntity.Property(c => c.LastName).HasMaxLength(50);
customerEntity.HasRequired(c =>
c.PrimaryAddress).WithRequiredDependent();
customerEntity.HasOptional(c => c.SecondaryAddress).WithOptionalDependent();
customerEntity.HasOptional(c => c.TeritaryAddress).WithOptionalDependent();
var addressEntity = modelBuilder.Entity<EmailAddress>();
addressEntity.HasKey(c => c.EmailAddressId);
addressEntity.Property(c => c.Address).HasMaxLength(200);
}
}
答案 1 :(得分:0)
对于我想要做的事情,似乎并不是原生的解决方案。
所以我最后将它们添加为非映射设置,只使用linq从我添加的一对多中检索。