【问题标题】:How to setup a one to one relationship entity framework code first如何首先设置一对一的关系实体框架代码
【发布时间】:2015-03-27 10:36:13
【问题描述】:

我正在尝试关注这里的许多类似问题,但我无法让它发挥作用。我正在从一对多变成一对一。每个测量将有一个 ClientPicture。

无法确定类型“FitFactor.Models.Clients.ClientPicture”和“FitFactor.Models.Clients.Measurement”之间关联的主体端。此关联的主体端必须使用关系流式 API 或数据注释显式配置。

 public class ClientPicture
{
   public int Id { get; set; }
    public string ClientPictureUrl { get; set; }
    public string ClientName { get; set; }
    public DateTime? ClientPictureDate { get; set; }

    public Guid MeasurementId { get; set; }
    [ForeignKey("MeasurementId")]
    public virtual Measurement Measurement { get; set; }
}

测量

 public class Measurement
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
    public Guid Id { get; set; }
    public DateTime? MeasurementDate { get; set; }
    public decimal? BustMeasurement { get; set; }
    public decimal? ChestMeasurement { get; set; }
    public decimal? WaistMeasurement { get; set; }
    public decimal? HipsMeasurement { get; set; }

    public int ClientPictureId { get; set; }
    [ForeignKey("ClientPictureId")]
    public virtual ClientPicture ClientPicture { get; set; }
}

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    在一对一关系中,一端必须是主体,另一端必须是从属。主体应首先插入,并且可以在没有依赖项的情况下存在。依赖端是必须插入在主体之后的一端,因为它具有主体的外键。

    我认为你有两个选择:

    • 您在两个实体中使用相同的 Id,并且依赖的 Id 被声明为一对一关系的 FK

      //The principal
      public class ClientPicture
      {
        public int Id { get; set; }
        //...
        public virtual Measurement Measurement { get; set; }
      }
      //The dependent
      public class Measurement
      { 
        [Key, ForeignKey("ClientPicture")]
        public int ClientPictureId { get; set; }
        public virtual ClientPicture ClientPicture { get; set; }
      }
      
    • 您在实体中使用不同的 ID,但您只能使用导航属性:

      public class ClientPicture
      {
        public int Id { get; set; }
        //...
        public virtual Measurement Measurement { get; set; }
      }
      
      public class Measurement
      { 
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
        public Guid Id { get; set; }
        //...
      
        [Required]
        public virtual ClientPicture ClientPicture { get; set; }
      }
      

      EF 允许您以一对一关系映射 FK 的唯一方法是当 FK 也被声明为 PK 时(如第一个变体)。检查此link 了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多