C# EF代码第一列名称
我有以下课程:C# EF代码第一列名称,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有以下课程: public class CompanyInfo { [Key] public string CompanyId { get; set; } public string CompanyName { get; set; } public Address CompanyAddress { get; set; } } 使用相应的地址类: public class Address {
public class CompanyInfo
{
[Key]
public string CompanyId { get; set; }
public string CompanyName { get; set; }
public Address CompanyAddress { get; set; }
}
使用相应的地址类:
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类的成员不易访问以用于数据注释(使用域模型/视图模型结构),因此在控制器中映射为:
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不是合适的场所,因为它只是在控制器中映射回模型
为可重用类“Address”设置列名的正确方法是什么?我假设这可以通过FluentAPI if实体框架完成,但我不确定如何继续
任何帮助都将不胜感激。使用
外键
数据注释,以便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; }
}
您可以在
上下文
方法OnModelCreating
中重写,以指定公司信息
和地址
之间的关系,并且可以指定将标识该关系的外键名
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"); });
}
}
公共类DataContext:DbContext{
//其他属性
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(m=>m.CompanyAddress)
.WithOptional()
.Map(m=>{m.MapKey(“公司地址”);});
}
}
可能的重复项不是重复项。仔细看看这个独特的用例。我在提交之前看到了这一点,它与我的用例不匹配。@mason这不是该问题的重复,因为OP想命名在其模型中不存在或由EFP生成的列。如果您修改域模型,使地址最终出现在自己的表中,并且您从您的我试图避免使用外键,只是在应用程序中的所有地址用例中动态重用Address类,但这绝对是一个可行的解决方案。谢谢