2015-10-27 17 views
7

Bağlanmak istediğim iki varlık var 1: 1 ilişki. Kullanıcı asıl ve UserActivation bağımlıdır, ancak bunun nasıl çalıştığını bilmiyorum. Ben 'sanal' anahtar kelimeyi kaldırmak için çalıştık Varlık çerçevesi Kod İlk Bire Bir ilişki

public class User 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Lastname { get; set; } 
    public string Username { get; set; } 

    public virtual UserActivation UserActivation { get; set; } 
} 

public class UserActivation 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public Guid UserId { get; set; } 
    public bool Active { get; set; } 

    public virtual User User { get; set; } 
} 

, ForeignKey ("KullanıcıNo") veya ForeignKey ("Kullanıcı") eklemeye çalıştık, ben bile [Tuş, ForeignKey ("Kullanıcı" olmasını sağlamaya çalıştık) ve hiçbiri bana yardım etmedi. Sadece veri açıklamalarını kullanarak 1: 1 ilişki kurmak istiyorum. Herhangi bir yardım gerçekten takdir edilmektedir. Ayrıca iki sınıfımın da kendi PK'ları var.

+0

Aldığınız hata nedir? –

+0

şu anda aptalca bir şeyler yapmaya çalışıyorum ve "UserActivation_User_Source:" Rolü 'UserActivation_User_Source' ilişkisinde "UserActivation_User_Source" ilişkisinde var. Bağımlı Rol özellikleri temel özellikleri değil, çokluğu Bağımlı rol '*' olmalıdır. – GrandaS

+0

Modelinizde değişiklikler yaptıktan sonra geçişi eklediniz/güncellediniz. Yoksa otomasyonlar etkin mi? – mrsargent

cevap

10

yabancı anahtarları 1 için desteklenir: 1 deneyin: tiplerin Model.PersonPhoto 've ‘Model.Person’ arasında bir ilişki ana sonunu belirlemek edilemiyor

public class User 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Lastname { get; set; } 
    public string Username { get; set; } 

    public virtual UserActivation UserActivation { get; set; } 
} 

public class UserActivation 
{ 
    [Key] 
    [ForeignKey("User")] 
    public Guid Id { get; set; } 
    public bool Active { get; set; } 

    public virtual User User { get; set; } 
} 

. Bu ilişkilendirmenin temel ucu, ilişki akıcı API'si veya veri ek açıklamaları kullanılarak açıkça yapılandırılmalıdır.

Bu sorun, yabancı anahtarın içerdiğini tanımlamak için bağımlı sınıftaki bir ForeignKey ek açıklaması kullanılarak kolayca çözülebilir. Bire bir ilişkileri yapılandırırken, Entity Framework, bağımlıın birincil anahtarının da yabancı anahtar olmasını gerektirir. Bizim durumumuzda PersonPhoto bağımlı ve onun anahtarı, PersonPhoto.PersonId, aynı zamanda yabancı anahtar olmalıdır. Devam edin ve Örnek 4-21'de gösterildiği gibi, PersonPhoto.PersonId özelliğine ForeignKey ek açıklamalarını ekleyin. ForeignKey ek açıklamasını eklerken ilişki için gezinme özelliğini belirtmeyi unutmayın.

https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449317867/ch04s07.html

+0

Evet, bu işe yaradı, 1: 1 yaptı, ama şimdi her ikisi de aynı olması gerektiğine inanıyorum, bu 1: 1 yapmak mümkün değil, ama Kullanıcı Id kullanacak ve UserActivation bağlanmak için UserId özelliğini kullanır? – GrandaS

+0

1: 1 ise neden ayrı kimliklere ihtiyacınız var? –

+0

İşte daha ayrıntılı bir açıklama: http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-3-shared-primary-key-associations –