Подтвердить что ты не робот

Сопоставление столбцов в корневом коде Entity First

У меня возникли проблемы с попыткой сопоставить мою модель 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  

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

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

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

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

public class Address
{
     City
     State
     Zip, etc
}
4b9b3361

Ответ 1

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

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

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


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

Это снова информация от googling, и я понятия не имею, не хочу ли я просто пропустить то, что вам нужно:).

Ответ 2

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

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

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