1

私は EF 4.3 を使用しており、Oracle データベースにアクセスしています。EF が Oracle データベースの SQL を生成する方法と、EF 4.3 ではカスタム規則を追加できないため、プロパティごとにすべて大文字で列名を手動で指定する必要があります。

[Column("MYPROPERTY")]
public string MyProperty { get; set; }

では、複合型を使用するプロパティについてはどうすればよいでしょうか。次の複合型があります。

public class Minute {
    public int Value { get; set; }
}

および次の DbContext:

public class MyDbContext : DbContext {
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Minutes>().Property(x => x.Value);
    }
}

そして私のエンティティ:

[Table("MYENTITY")]
public class MyEntity {
    [Column("MYPROPERTY")]
    public string MyProperty { get; set; }
    [Column("MYMINUTES")] //this does nothing
    public Minutes MyMinutes { get; set; }
}

生成された SQL では、プロパティは存在しない... I MyMinuteswant にマップされます。"Extent1"."MyMinutes_Value""Extent1"."MYMINUTES"

机に頭をぶつける以外に、ここで何ができますか?

4

1 に答える 1

0

答えはかなり単純ですが、十分に文書化されていません。私の知る限り、属性を使用して実行することはできません。データコンテキストのOnModelCreatingメソッドに行を追加します。

public class MyDbContext : DbContext {
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Minutes>().Property(x => x.Value);
        modelBuilder.Entity<MyEntity>().Property(x => x.MyMinutes.Value).HasColumnName("MYMINUTES");
    }
}

したがって、メソッドの最初の行は、一般に複合型を設定します。2行目は、特にMyEntityクラスのプロパティをマップする方法をEFに指示します。ビオラ!

于 2012-06-21T23:06:11.907 に答える