2015-03-13 6 views
0

У меня есть следующий класс:EF Code First Имена столбцов

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 

Учитывая, что члены класса Адрес не легко доступны для использования с аннотацией данных (с использованием доменных имен Модель/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, если Entity Framework, но я не уверен, как действовать дальше.

Любая помощь была бы принята с благодарностью.

+0

возможно дубликат [Изменить таблицы и столбца Отображения Entity Framework v4.3] (http://stackoverflow.com/questions/10554888/change-table-and-column-name-mappings-entity-framework -v4-3) – mason

+0

Не дубликат. Познакомьтесь с уникальным вариантом использования. Я видел это до отправки, и это не соответствует моему варианту использования. – New2ASPMVC

+0

@mason это не дублирует этот вопрос, поскольку OP хочет назвать столбец, отсутствующий в его модели, или сгенерированный EF. –

ответ

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

Я пытался избежать использования внешнего ключа и просто повторно использовать класс адресов динамически для всех случаев использования адресов в приложении, но это определенно является жизнеспособным решением. Благодаря! – New2ASPMVC

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; } 
} 
Смежные вопросы