EF-Code first complex type with a navigational property
My Model:
public class Country
{
public int CountryId { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Us开发者_运维知识库ers { get; set; }
}
public class Location
{
public string Address { get; set; }
public virtual int CountryId { get; set; }
public virtual Country Country { get; set; }
}
public class User{
protected User()
{
Location = new Location();
}
public int UserId { get; set; }
public Location Location { get; set; }
}
When generating the database, I get:
One or more validation errors were detected during model generation:
System.Data.Edm.EdmEntityType: : EntityType 'Location' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �Locations� is based on type �Location� that has no keys defined.
How do I have a navigational property inside a complex type? If I remove the country navigational property, it works fine.
Navigation properties (refering to other entities) on a complex type are not supported. You must either make your Location
an entity (with its own table) or remove the navigation property Country
from Location
(and add the [ComplexType]
attribute as mentioned by Steve Morgan).
Edit
Reference: http://msdn.microsoft.com/en-us/library/bb738472.aspx
"Complex type cannot contain navigation properties."
EF wants to infer a primary key for Location, but can't.
Add a public int LocationId { get; set; }
to the Location
class and it should be happy.
If you want to use Location
as a complex type, annotate it with a [ComplexType]
attribute.
精彩评论