EF4 CTP5 を使用しています。ここに私のPOCOがあります:
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public List<Address> Addresses { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public decimal Total { get; set; }
public Address ShippingAddress { get; set; }
public Address BillingAddress { get; set; }
}
Address を Order クラスの ComplexType にする方法はありますか? これで遊んだ後、そうではないと思いますが、私が見たことのない方法があるかもしれません.
編集:以下のショーンに応えて、私はそれに最善を尽くしました:
//modelBuilder.Entity<Order>().Ignore(o => o.BillingAddress);
//modelBuilder.Entity<Order>().Ignore(o => o.ShippingAddress);
modelBuilder.Entity<Order>()
.Property(o => o.BillingAddress.City).HasColumnName("BillingCity");
実行時に「構成されたプロパティ 'BillingAddress' は、エンティティ 'Order' で宣言されたプロパティではありません」というエラーで失敗します。 使おうとしてもうまくいきIgnore()
ません。次に、Hanselman の記事は CTP4 ですが、CTP5 に相当するものは次のとおりです。
modelBuilder.Entity<Order>().Map(mapconfig =>
{
mapconfig.Properties(o => new {
o.Id
, o.Total
, o.BillingAddress.City
});
mapconfig.ToTable("Orders");
});
「タイプ 'Order' のプロパティ 'BillingAddress.City' をそのマッピングに含めることはできません」というエラーで失敗します。
あきらめる。たぶん、最終リリースはこのようなものになるでしょう。または、NHibernate に切り替える必要があるかもしれません =)