J'essaie de mapper mes entités en utilisant Entity Framework "code first", mais j'ai un problème avec le mappage d'un type complexe. Voici ma simplifié exampled:Mappage avec le framework d'entité "code first"
objet Domaine ressemble:
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;}
}
et la mise en correspondance:
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");
}
}
L'exception qui est jeté est: « La clé donnée était absente dans le dictionnaire . '
Quelqu'un peut-il m'aider?
Merci pour la réponse! Donc, dans ce cas, je devrais faire un agrégat (ce qui n'a pas beaucoup de sens je suppose) ou je ne devrais pas inclure City in Address, mais plutôt CityId (qui peut fonctionner pour moi, je n'ai pas nécessairement besoin de l'objet City lui-même). –
Autre chose: un type complexe peut-il être optionnel? Si j'attribue null à Adresse et l'enregistre, il génère une exception qu'il n'est pas nullable? –
http://msdn.microsoft.com/en-us/library/bb738472.aspx: Les propriétés de type complexe ne peuvent pas être nulles. Une exception InvalidOperationException se produit lorsque SaveChanges est appelée et qu'un objet complexe null est rencontré. Je suppose que cela répond à ma question. Le problème est que j'ai une adresse qui est obligatoire et une autre adresse qui est facultative ... –