Сопоставление столбцов в корневом коде 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
}
Ответы
Ответ 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