Entity framework 首先从实体框架代码中的子导航属性或父导航属性

Entity framework 首先从实体框架代码中的子导航属性或父导航属性,entity-framework,relationship,one-to-one,Entity Framework,Relationship,One To One,鉴于我有两个实体:代理和副代理: 在他们之间建立一对一关系的最佳方式是将导航属性从DeputyProfile到副childe再到parent或visa verse 应该是这样吗 public class DeputyProfile : IdableEntity { [Required] public virtual Deputy Deputy{ get; set; } [Required] public string Dosieur { get; set; }

鉴于我有两个实体:代理和副代理:

在他们之间建立一对一关系的最佳方式是将导航属性从DeputyProfile到副childe再到parent或visa verse

应该是这样吗

public class DeputyProfile : IdableEntity
{
    [Required]
    public virtual Deputy Deputy{ get; set; }

    [Required]
    public string Dosieur { get; set; }
}
做出决定的最佳逻辑规则是什么


p.S.作为IdableEntity的子类,类会有自己的Guid Id字段。

必须为任何关系选择主父端和从属子端。你可以自由选择你最喜欢的。在我看来,代理似乎是明确的原则,因为随着你的模式的发展,它可能会有更多的关系

通过共享主键实现一对一关系;DeputyProfile的主键必须是代理ID。这将使您的代码如下所示:

public class Deputy
{

   public int ID {get;set;}

   public int ProfileID {get;set;}
   public virtual DeputyProfile Profile {get;set;}

    [Required]
    public string FirstName { get; set; }

    public string Patronimic { get; set; }

    [Required]
    public string LastName { get; set; }
}

public class DeputyProfile
{
    public int DeputyID {get;set}
    public virtual Deputy Deputy {get;set}

    [Required]
    public string Dosieur { get; set; }
}
注意:现在实施时,每位代表都必须有个人资料。如果配置文件是可选的,请将配置文件ID设置为“int”


我可以衷心推荐在Entity Framework 4.1及更高版本中实现关系

谢谢,我使用Guid ID,但我想这并没有什么区别。只是为了确保——在你的回答中,我看到这两个类相互了解,并且可以相互引用。如果为代理和DeputyProfile都定义了dbset,那么这是唯一可行的方法吗?或者我的方法似乎简单得多,但也可以在DbContext中工作?由于两者都是IdableEntity的子项,因此都继承了Guid Id字段。@MaximV.Pavlov 1。使用guid很好。2.如果从属实体有自己的密钥,则关系变为多对多。不必在两侧实现导航属性。3.不要只为ID从基类派生所有类。它将为所有类创建一个大表:每个层次结构构造一个表。请参阅我在上面列出的一系列博客。
public class Deputy
{

   public int ID {get;set;}

   public int ProfileID {get;set;}
   public virtual DeputyProfile Profile {get;set;}

    [Required]
    public string FirstName { get; set; }

    public string Patronimic { get; set; }

    [Required]
    public string LastName { get; set; }
}

public class DeputyProfile
{
    public int DeputyID {get;set}
    public virtual Deputy Deputy {get;set}

    [Required]
    public string Dosieur { get; set; }
}