Entity framework 多对一?

Entity framework many to one?

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

因为这个 table 将被其他 table 使用,我不想为每个 table 创建一个导航器。有什么办法可以做到吗?

希望您清楚我的意思。实例模型如下;

    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; }
}

I don't want to create a navigator for each of the tables.

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

I will add a new booking record with 3 uploads. These 3 uploads will have the same Id.

  1. 如果Bookings和Upload一对多关系,这意味着一个Booking 可以有 多个上传 ,那么您应该将您的模型修改为:
    • 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查看关系定义两个实体如何相互关联。

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

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

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

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; }
}

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