2

Entity Frameworkの「コードファースト」を使用してエンティティをマッピングしようとしていますが、複合型のマッピングに問題があります。ここに私の単純化された例があります:

ドメインオブジェクトは次のようになります。

public class Customer
{
    public Address DeliveryAddress {get; set;}
}

public class Address
{
    public string StreetName {get; set;}
    public string StreetNumber {get; set;}
    public City City {get; set;}
}

public class City
{
    public int Id {get; set;}
    public string Name {get; set;}
}

およびマッピング:

public class CustomerConfiguration : EntityConfiguration<Customer>
{
    public CustomerConfiguration()
    {
        this.HasKey(b => b.Id);
        this.Property(b => b.Id).IsIdentity();

        this.MapSingleType(x => new
        {
            Id = x.Id,
            DeliveryAddress_StreetName = x.DeliveryAddress.StreetName,
            DeliveryAddress_StreetNumber = x.DeliveryAddress.StreetNumber,
            DeliveryAddress_CityId = x.DeliveryAddress.City.Id, // this line causes an exception
        }).ToTable("Customer");
    }
}

public class AddressConfiguration : ComplexTypeConfiguration<Address>
{
    public AddressConfiguration()
    {           
        this.Property(b => b.StreetName).HasMaxLength(100).IsRequired().IsUnicode();
        this.Property(b => b.StreetNumber).HasMaxLength(6).IsRequired().IsUnicode();
}

public class CityConfiguration : EntityConfiguration<City>
{
    public CityConfiguration()
    {
        this.HasKey(b => b.Id);
        this.Property(b => b.Id).IsIdentity();
        this.Property(b => b.Name).IsRequired().HasMaxLength(200).IsUnicode();

        this.MapSingleType(x => new
        {
            Id = x.Id,
            Name = x.Name,
        }).ToTable("City");
    }
}

スローされる例外は次のとおりです。'指定されたキーがディクショナリに存在しませんでした。'

誰か助けてもらえますか?

4

3 に答える 3

2

サイトエンティティタイプをアドレス複合タイプに追加しようとしています。これは不可能です。 エンティティと同様に、複合型はスカラープロパティまたはその他の複合型プロパティで構成されます。複合型にはキーがないため、複合型オブジェクトは、親オブジェクト以外はEntityFrameworkで管理できません。
詳細については、Complexタイプの記事を参照してください。

于 2010-10-05T12:57:40.487 に答える
0

クラス参照は、エンティティフレームワークのナビゲーションプロパティを使用する場合に使用します。これを行うには、クラス参照を仮想化する必要があります。したがって、Addressでは、Cityプロパティは仮想である必要があります。また、設定を簡単にするために(特に、MVCを使用している場合)、このような参照を保持する側にID値を含める必要があります

public virtual City City {get; set;}
public int CityId {get; set;}
于 2011-05-13T15:38:47.033 に答える
0

住所の構成では、住所が都市に接続されていません。

于 2010-10-05T09:09:42.237 に答える