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.
- 如果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 仅支持对应于主键/外键的导航。如果你想确保你的 Upload
s 对它们的使用位置一无所知,你需要引入一个新的 table 来表示 Upload
s 的集合。
这还允许您使用标识字段为每个集合自动编号。
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; }
}
请注意,此架构不会阻止您意外地将同一组上传内容链接到多个父项。
我正在尝试创建一个新的 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.
- 如果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 仅支持对应于主键/外键的导航。如果你想确保你的 Upload
s 对它们的使用位置一无所知,你需要引入一个新的 table 来表示 Upload
s 的集合。
这还允许您使用标识字段为每个集合自动编号。
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; }
}
请注意,此架构不会阻止您意外地将同一组上传内容链接到多个父项。