web-dev-qa-db-ja.com

Entity Framework Code Firstの列のマッピング

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
}
36
Dismissile

私はあなたがしなければならないと信じています

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

db列名にプロパティ名とは異なる名前を付けたいすべての列に対して。


編集: さらに検索した後、私は この質問 に出会いました。それとあなたが投稿したエラーから判断すると、mc.Properties()は値を異なるテーブルに分割するためのものであり、実際にそれらのテーブル名を変更するのではないようです。名前の変更はまだ手動で行う必要があると思います。

これもまたグーグルからの情報であり、あなたが望んでいることを正確に行うためのピースが欠けているだけかどうかはわかりません:)。

52
KallDrexx

DataAnnotationsを使用してはどうですか?

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

http://msdn.Microsoft.com/en-us/data/gg193958 にサンプルの完全なリストがあります。

43
Kamyar