我有以下课程:
public class CompanyInfo
{
[Key]
public string CompanyId { get; set; }
public string CompanyName { get; set; }
public Address CompanyAddress { get; set; }
}
使用相应的Address类:
public class Address
{
public string StreetAddress { get; set; }
public string StreetAddress2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string Plus4 { get; set; }
}
这就是我的问题......地址现在生成类型为
的列名CompanyAddress_StreetAddress
我更喜欢以下内容:
PrimaryStreetAddress
鉴于Address类的成员不容易与Data Annotation一起使用(使用Domain Model / ViewModel结构),并且在控制器中映射如下:
var company = new CompanyInfo
{
CompanyId = GenerateAccountNumber(),
CompanyName = addCompany.CompanyName,
CompanyAddress = new Address
{
StreetAddress = addCompany.StreetAddress,
StreetAddress2 = addCompany.StreetAddress2,
City = addCompany.City,
State = addCompany.State,
Zip = addCompany.Zip,
Plus4 = addCompany.Plus4
},
-- some other fields here --
};
我知道ViewModel不是正确的场所,因为它只是在控制器中映射回模型。
为可重复使用的类设置列名的正确方法是什么?地址'?我假设如果实体框架可以通过FluentAPI完成,但我不确定如何继续。
非常感谢任何帮助。
答案 0 :(得分:0)
使用ForeignKey
数据注释,以便ef不会使用自己的约定创建自己的外键。
public class CompanyInfo
{
[Key]
public string CompanyId { get; set; }
public string CompanyName { get; set; }
public Address CompanyAddress { get; set; }
[ForeignKey("CompanyAddress")]
public string PrimaryStreetAddress { get; set; }
}
答案 1 :(得分:0)
您可以在context
方法OnModelCreating
中覆盖以指定CompanyInfo
和Address
之间的关系,并且可以指定外键名称这将确定关系。
public class DataContext : DbContext {
//other properties
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<CompanyInfo>()
.HasRequired(m => m.CompanyAddress)
.WithOptional()
.Map(m => { m.MapKey("CompanyAddressId"); });
}
}