2013-10-27 3 views
0

У меня есть следующие модели, которые я использую в своем приложении с кодом Entity Framework 6.Entity framework отношение один к одному

public class Customer 
{ 
    public Customer 
    { 

    } 

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

    public virtual Address Address { get; set; } 
} 


public class Address 
{ 
    public Address 
    { 

    } 

    public int Id { get; set; } 
    public string Street { get; set; } 
    public int Number { get; set; } 
    public int Country { get; set; } 

    public virtual Customer Customer { get; set; }    
} 

Когда я пытаюсь сохранить их, я получаю следующее сообщение об ошибке:

Unable to determine the principal end of an association between the types Customer and Address

ответ

3

Вам нужно speicify иностранных ключевых отношений. Как упомянуто here, попробуйте добавить [ForeignKey("CustomerId")] над public virtual Customer Customer { get; set; } и [ForeignKey("AddressId")] над public virtual Address Address { get; set; } и добавить эти поля id к модели. Такие как:

public class Customer 
{ 
    public Customer 
    { 

    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Addressid { get; set; } 

    [ForeignKey("AddressId")] 
    public virtual Address Address { get; set; } 
} 


public class Address 
{ 
    public Address 
    { 

    } 

    public int Id { get; set; } 
    public string Street { get; set; } 
    public int Number { get; set; } 
    public int Country { get; set; } 
    public int CustomerId { get; set; } 

    [ForeignKey("CustomerId")] 
    public virtual Customer Customer { get; set; }    
} 
+0

Да, это решает проблему. Большое спасибо! Еще один вопрос: я читал, что может быть достигнуто также с помощью свободного api ... и попытался сделать это: на Customer 'HasRequired (c => c.Address) .WithRequiredPrincipal (a => a.Customer);' у меня есть сделать то же самое для адреса, или этого достаточно? И это работает ... – user2818430

+0

Он должен быть определен на стороне с внешним ключом. В примере, который я дал, поскольку адрес и клиент сохраняют внешний ключ, он должен быть с обеих сторон. – pcreech

Смежные вопросы