EF 4.1 Code Firstモデルをデータベースにマップしようとすると問題が発生します。データベースがコードと正確に一致する場合はすべて正常に機能しますが、列の名前が異なる場合にマップしようとすると、問題が発生します。
メソッドの一部が欠落している/異なるため、CTPビルドの1つでビルドされたはずのチュートリアルに従っていました。
私のモデルは次のようになります:
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)'は無効です。式はプロパティを表す必要があります: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
}
私はあなたがしなければならないと信じています
_modelBuilder.Entity<Dinner>().Property(x => x.HostedBy).HasColumnName("colHost");
_
db列名にプロパティ名とは異なる名前を付けたいすべての列に対して。
編集: さらに検索した後、私は この質問 に出会いました。それとあなたが投稿したエラーから判断すると、mc.Properties()
は値を異なるテーブルに分割するためのものであり、実際にそれらのテーブル名を変更するのではないようです。名前の変更はまだ手動で行う必要があると思います。
これもまたグーグルからの情報であり、あなたが望んでいることを正確に行うためのピースが欠けているだけかどうかはわかりません:)。
DataAnnotationsを使用してはどうですか?
[Key]
[Column("ColID", TypeName="int")]
public int DinnerID { get; set; }
http://msdn.Microsoft.com/en-us/data/gg193958 にサンプルの完全なリストがあります。