EF代码第一列名称

时间:2015-03-13 13:16:00

标签: 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; }
    }

使用相应的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完成,但我不确定如何继续。

非常感谢任何帮助。

2 个答案:

答案 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中覆盖以指定CompanyInfoAddress之间的关系,并且可以指定外键名称这将确定关系。

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"); });
    }
}