实体框架多对一?

时间:2021-06-17 11:59:47

标签: c# entity-framework asp.net-core entity-framework-core entity-relationship

我正在尝试创建一个新表,该表将被任何其他表使用。 表名将是 Uploads。我会为每个源表记录手动增加Id字段。
例如:我将添加 3 个上传的新预订记录。这 3 个上传将具有相同的 ID。 之后,当我创建一个带有 2 个上传的新场地记录时。我将增加Uploads.Id,然后这2个上传将具有相同的Id。

由于此表将被其他表使用,我不想为每个表创建导航器。有什么办法吗?

希望你清楚我想问什么。实例模型如下;

    public class Upload
{
    public int Id { get; set; }

    public string Name { get; set; }
}



public class Bookings {

    public int Id {get;set;}
   
    public int? UploadId { get; set; }

    public virtual ICollection<Upload> Uploads { get; set; }
}

public class Venues {

    public int Id {get;set;}
   
    public int? UploadId { get; set; }

    public virtual ICollection<Upload> Uploads { get; set; }
}

2 个答案:

答案 0 :(得分:0)

<块引用>

我不想为每个表都创建一个导航器。

默认情况下,当在类型上发现导航属性时,将创建关系

<块引用>

我将添加 3 个上传的新预订记录。这 3 次上传将具有相同的 ID。

  1. 如果预订和上传具有一对多关系,这意味着一个预订可以有多次上传< /strong>,那么您应该将模型修改为:
    • public class Upload
      {
         public int Id { get; set; }
         public string Name { get; set; }
         public int? BookingId { get; set; }
         public int? VenueId { get; set; }
      }
      public class Bookings 
      {
         public int Id {get;set;}
         public virtual ICollection<Upload> Uploads { get; set; }
      }
      public class Venues 
      {
         public int Id {get;set;}
         public virtual ICollection<Upload> Uploads { get; set; }
      }
      

我建议您click this link查看定义两个实体如何相互关联的关系。

答案 1 :(得分:0)

虽然您可以在 BookingId 表中添加 VenueId / Upload,但根据此问题的其他答案。

由于 EF Core 仅支持对应于主键/外键的导航。如果您想确保您的 Upload 对它们的使用位置一无所知,您需要引入一个新表来表示 Upload 的集合。

这还允许您使用身份字段为每个集合自动编号。

public class UploadSet
{
   public int Id { get; set; }
   public virtual ICollection<Upload> Uploads { get; set; }
}
public class Upload
{
   public int Id { get; set; }
   public int SetId { get; set; }
   public string Name { get; set; }
}
public class Bookings 
{
   public int Id {get;set;}
   public int? UploadSetId {get;set;}
   public virtual UploadSet UploadSet { get; set; }
}

请注意,此架构不会阻止您将同一组上传意外链接到多个父级。