2012-10-02 101 views
1

我试图建立一个双向一对一的关系。但是,我无法获得两个实体的双向设置。EF:一对一关系

例如,可以说一个人有一个电话号码,并且一个电话号码只能与一个人相关联。我会:

public class Person : Entity 
    { 
    public long PersonId { get; set; } 
    public virtual PhoneNumber PhoneNumber {get; set; } 
    } 

    public class PhoneNumber : Entity 
    { 
    public long PhoneNumberId { get; set; } 
    } 

然而,这种重新安排,我不能让一个双向设置。即我不能有phoneNumber.Person.


我曾尝试:

var realNumber = new PhoneNumber(); 
    var person = new Person() {PhoneNumber = realNumber}; 
    context.SaveChanges(); 

这里,电话号码:

public class PhoneNumber : Entity 
    { 
    public long PhoneNumberId { get; set; } 

    [InverseProperty("PersonId")] 
    public virtual Person Person {get; set; } 
    } 

这似乎并不当我执行下面的代码工作实体具有列Person(设置为NULL),并且该人员具有PhoneNumber(具有值)的列。

+1

EF要求两个实体共享的1相同的主键:1,因此,你应该为它们命名相同(约定的目的)。 –

+0

@MystereMan这实际上是EF中获得1:1的两种方法之一。 http://stackoverflow.com/a/10837964/176877 –

+0

@ChrisMoschini - 咦?这两种方法都有一个共享的主键。我不明白你的观点,也不反驳我说的话。 –

回答

1

这对我的作品

namespace Ef1to1 
{ 
    public class TestContext : DbContext 
    { 

     public TestContext() 
      : base("Data Source=127.0.0.1;database=Junk;Integrated Security=SSPI;") 
     { 

     } 
     public DbSet<Person> Persons { get; set; } 
     public DbSet<PhoneNumber> PhoneNumbers { get; set; } 
    } 
    [Table("Person")] 
    public class Person 
    { 
     [Key, Column("PersonId")] 
     public long Id { get; set; } 

     public virtual PhoneNumber phoneNumber { get; set; } 
    } 

    [Table("PhoneNumber")] 
    public class PhoneNumber 
    { 

     [Key, Column("PhoneNumberId"), ForeignKey("person")] 
     public long Id { get; set; } 

     public virtual Person person { get; set; } 
    } 

    public class Program 
    { 

     static void Main(string[] args) 
     { 
      var realNumber = new PhoneNumber(); 
      var person = new Person() { phoneNumber = realNumber }; 
      var context = new TestContext(); 

      context.Persons.Add(person) ; 
      context.SaveChanges(); 
      ; 

     } 
    } 
} 
+0

我现在试一试... – Karan

+0

嗯...我得到一个“无法确定类型之间的关联的主要结束” – Karan

+0

@Karan尝试我的编辑 – Gratzy