Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一对一或零实体框架Fluent API_C#_Sql Server_Entity Framework 6_Ef Fluent Api - Fatal编程技术网

C# 一对一或零实体框架Fluent API

C# 一对一或零实体框架Fluent API,c#,sql-server,entity-framework-6,ef-fluent-api,C#,Sql Server,Entity Framework 6,Ef Fluent Api,我正在使用fluentapi创建一对一或零的关系,在第一种情况下 Manager-ContactDetails有效,但在第二种情况下,Representative-ContactDetails无效。但配置是相同的 据我所知,在一对一/零关系中,两个类中的一个应该将键定义为primary和foreignKey,以便知道哪个类是依赖的。例如,ContactDetails中的Id不能同时作为代表表和经理表的外键?这就是为什么会自动创建一个代表Id?但为什么这种关系被认为是一对多 管理类: [Ta

我正在使用fluentapi创建一对一或零的关系,在第一种情况下 Manager-ContactDetails有效,但在第二种情况下,Representative-ContactDetails无效。但配置是相同的

据我所知,在一对一/零关系中,两个类中的一个应该将键定义为primary和foreignKey,以便知道哪个类是依赖的。例如,ContactDetails中的Id不能同时作为代表表和经理表的外键?这就是为什么会自动创建一个代表Id?但为什么这种关系被认为是一对多

管理类:

  [Table("Manager")]
public class Manager
{
    [Key]
    [ForeignKey("ApplicationUser")]
    public string Id { get; set; }
    [Required]
    [MaxLength(100)]
    public string Name { get; set; }
    public virtual ContactDetail ContactDetail { get; set; }
    [JsonIgnore]
    public virtual ICollection<Client> Clients { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}
[Table("Representative")]
public class Representative
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MaxLength(99)]
    public string Name { get; set; }
    [Required]
    public int ClientId { get; set; }
    [JsonIgnore]
    public virtual Client Client{ get; set; }
   public virtual ContactDetail ContactDetail {get; set; }
}
    public class ContactDetail
{
    [Key]
    public string Id { get; set; }

    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; }
    [MaxLength(100)]
    public string SecondName { get; set; }
    [MaxLength(100)]
    public string LastName { get; set; }

    [JsonIgnore]
    public virtual Manager Manager { get; set; }

    [JsonIgnore]
   public virtual Representative Representative { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

           modelBuilder.Entity<Manager>()
               .HasOptional(m => m.ContactDetail)
               .WithRequired(ad => ad.Manager);

          modelBuilder.Entity<Representative>()
               .HasOptional(c => c.ContactDetail)
               .WithRequired(ad => ad.Representative);

        base.OnModelCreating(modelBuilder);
    }
联系人详细信息类别:

  [Table("Manager")]
public class Manager
{
    [Key]
    [ForeignKey("ApplicationUser")]
    public string Id { get; set; }
    [Required]
    [MaxLength(100)]
    public string Name { get; set; }
    public virtual ContactDetail ContactDetail { get; set; }
    [JsonIgnore]
    public virtual ICollection<Client> Clients { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}
[Table("Representative")]
public class Representative
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MaxLength(99)]
    public string Name { get; set; }
    [Required]
    public int ClientId { get; set; }
    [JsonIgnore]
    public virtual Client Client{ get; set; }
   public virtual ContactDetail ContactDetail {get; set; }
}
    public class ContactDetail
{
    [Key]
    public string Id { get; set; }

    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; }
    [MaxLength(100)]
    public string SecondName { get; set; }
    [MaxLength(100)]
    public string LastName { get; set; }

    [JsonIgnore]
    public virtual Manager Manager { get; set; }

    [JsonIgnore]
   public virtual Representative Representative { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

           modelBuilder.Entity<Manager>()
               .HasOptional(m => m.ContactDetail)
               .WithRequired(ad => ad.Manager);

          modelBuilder.Entity<Representative>()
               .HasOptional(c => c.ContactDetail)
               .WithRequired(ad => ad.Representative);

        base.OnModelCreating(modelBuilder);
    }
重写上下文中的方法:

  [Table("Manager")]
public class Manager
{
    [Key]
    [ForeignKey("ApplicationUser")]
    public string Id { get; set; }
    [Required]
    [MaxLength(100)]
    public string Name { get; set; }
    public virtual ContactDetail ContactDetail { get; set; }
    [JsonIgnore]
    public virtual ICollection<Client> Clients { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}
[Table("Representative")]
public class Representative
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MaxLength(99)]
    public string Name { get; set; }
    [Required]
    public int ClientId { get; set; }
    [JsonIgnore]
    public virtual Client Client{ get; set; }
   public virtual ContactDetail ContactDetail {get; set; }
}
    public class ContactDetail
{
    [Key]
    public string Id { get; set; }

    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; }
    [MaxLength(100)]
    public string SecondName { get; set; }
    [MaxLength(100)]
    public string LastName { get; set; }

    [JsonIgnore]
    public virtual Manager Manager { get; set; }

    [JsonIgnore]
   public virtual Representative Representative { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

           modelBuilder.Entity<Manager>()
               .HasOptional(m => m.ContactDetail)
               .WithRequired(ad => ad.Manager);

          modelBuilder.Entity<Representative>()
               .HasOptional(c => c.ContactDetail)
               .WithRequired(ad => ad.Representative);

        base.OnModelCreating(modelBuilder);
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.has可选(m=>m.ContactDetail)
.WithRequired(ad=>ad.Manager);
modelBuilder.Entity()
.has可选(c=>c.ContactDetail)
.需要(广告=>广告代表);
基于模型创建(modelBuilder);
}

FYI:one-to-one和many-to-many关系不合逻辑,无法在数据库中表示。只支持一对多关系possible@CamiloTerevinto我需要一个经理只有一个ContactDetail或零,而且一个代表只有一个ContactDetail或零。如果我将foreignKeys添加到ContactDetail表中,最终将是一对多关系-我如何实现只添加一条记录(一名经理-一条ContactDetail记录)
modelBuilder.Entity().has可选(r=>r.ContactDetail).WithOptionalPrincipal(c=>c.Representative).Map(m=>m.MapKey(“RepresentativeId”)