2015-03-13 97 views
0

我有下面的类:EF代码第一列命名

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 

鉴于地址类的成员都没有用于与数据注释(使用域模型/视图模型结构)使用容易获得并且在所述控制器被映射为这样:

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

可能重复http://stackoverflow.com/questions/10554888/change-table-and-column-name-mappings-entity-framework -v4-3) – mason 2015-03-13 13:17:40

+0

不重复。仔细观察独特的用例。我在提交之前看到了这一点,并且与我的用例不符。 – New2ASPMVC 2015-03-13 13:29:31

+0

@mason由于OP想要命名其模型中不存在或由EF – 2015-03-13 13:30:04

回答

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"); }); 
    } 
} 
[更改表和列名映射实体框架V4.3(的
+0

我试图避免使用外键,只是动态地重用地址类为应用程序内的所有地址使用情况,但这绝对是一个可行的解决方案。谢谢! – New2ASPMVC 2015-03-13 13:49:49

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