Сначала сопоставление столбцов в коде Entity Framework - PullRequest
36 голосов
/ 19 мая 2011

У меня возникают проблемы при попытке сопоставить мою модель EF 4.1 Code First с базой данных.Все работает нормально, когда база данных точно соответствует коду, но когда я пытаюсь отобразить, когда столбцы различаются по имени, у меня возникают проблемы.

Я следовал учебнику, который, должно быть, был построен с одним изCTP строится потому, что некоторые методы отсутствуют / отличаются.

Моя модель выглядит так:

public class Dinner
{
    public int DinnerID { get; set; }  
    public string HostedBy { get; set; }
    public DateTime EventDate { get; set; }
    public string Title { get; set; }
    public string Address { get; set; }
}

public class NerdDinners : DbContext
{
    public DbSet<Dinner> Dinners { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // THIS IS WHAT I TRIED BUT IT IS FAILING
        modelBuilder.Entity<Dinner>().Map(mc =>
            {
                mc.Properties(c => new {
                    colID = c.DinnerID,
                    colTitle = c.Title,
                    colHost = c.HostedBy,
                    colDate = c.EventDate,
                    colAddress = c.Address
                });
                mc.ToTable("tblDinner");
            }
        );
    }
}

Я хочу, чтобы моя таблица была:

tblDinners  
    colID  
    colHost  
    colDate  
    colTitle  
    colAddress  

Iполучаю эту ошибку:

Выражение свойств 'c => new <> f__AnonymousType0`5 (colID = c.DinnerID, colTitle = c.Title, colHost = c.HostedBy, colDate = c.EventDate, colAddress = c.Address) 'недопустимо.Выражение должно представлять свойство: C #: 't => t.MyProperty' VB.Net: 'Function (t) t.MyProperty'.При указании нескольких свойств используйте анонимный тип: C #: 't => new {t.MyProperty1, t.MyProperty2}' VB.Net: 'Function (t) New From {t.MyProperty1, t.MyProperty2}'.

Каков правильный синтаксис для сопоставления столбцов?

Бонусные баллы, если вы дадите мне знать, как сопоставить свойство Address в подкласс под названием Address:

public class Address
{
     City
     State
     Zip, etc
}

Ответы [ 2 ]

51 голосов
/ 19 мая 2011

Я полагаю, вам просто нужно сделать

modelBuilder.Entity<Dinner>().Property(x => x.HostedBy).HasColumnName("colHost");

для всех ваших столбцов, для которых вы хотите, чтобы имена столбцов БД были названы иначе, чем имена их свойств.


Редактировать: После дополнительных поисков я наткнулся на этот вопрос . Судя по этому и сообщенной вами ошибке, похоже, что mc.Properties() больше подходит для разбиения значений на разные таблицы, а не для их переименования. Я думаю, что переименование все равно придется делать вручную.

Это опять информация от поиска в Google, и я понятия не имею, пропускаю ли я кусок, чтобы сделать именно то, что вы хотите :).

43 голосов
/ 19 мая 2011

Как насчет использования DataAnnotations?

[Key]
[Column("ColID", TypeName="int")]
public int DinnerID { get; set; }  

Полный список с образцами вы можете найти на http://msdn.microsoft.com/en-us/data/gg193958

...