Сопоставление с структурой сущности «сначала код» - PullRequest
1 голос
/ 05 октября 2010

Я пытаюсь отобразить свои сущности, используя 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");
    }
}

Исключение, которое выдается: «Данный ключне было в словаре. '

Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 05 октября 2010

Вы пытаетесь добавить тип объекта сайта в комплексный тип адреса.Это невозможно Как и сущности, сложные типы состоят из скалярных свойств или других свойств сложных типов.Поскольку у сложных типов нет ключей, Entity Framework не может управлять объектами сложного типа, кроме родительского объекта.
Для получения дополнительной информации обратитесь к статье Сложный тип .*

0 голосов
/ 13 мая 2011

Ссылка на класс предназначена, если вы хотите использовать свойства навигации Entity Frameworks. Для этого вы должны сделать ссылки на классы виртуальными. Таким образом, в Address свойство City должно быть виртуальным. Также для простоты настройки (особенно если вы используете MVC) вы должны включить значение идентификатора на стороне, которая содержит ссылку, как это

public virtual City City {get; set;}
public int CityId {get; set;}
0 голосов
/ 05 октября 2010

Ваша конфигурация адреса не связывает адрес с городом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...