使用Entity Framework Core 2.2的项目包含一对具有多对多关系的实体。
实体如下:
class Feature
{
int Id { get; set;}
}
class House
{
int Id { get; set; }
ICollection<int> FeatureIds { get; set; }
}
由于EF Core本身还不支持多对多关系,因此我创建了一个连接类。
class HouseFeature
{
int FeatureId { get; set; }
int HouseId { get; set; }
}
这三个类都不包含另一个实体的属性,仅包含其ID。 Feature
实体都不包含houses
的列表。
HouseFeature
的配置类如下:
class HouseFeatureConfiguration : IEntityTypeConfiguration<HouseFeature>
{
void Configure(EntityTypeBuilder<HouseFeature> houseFeatureConfiguration)
{
}
}
如何配置EF Core关系?
我发现的所有示例都需要Feature Feature { get; set; }
上方的int FeatureId { get; set; }
之类的属性。这些Feature Feature { get; set; }
我没有用,所以我宁愿不要在模型中使用它们。仅具有id
字段时,是否可以定义包括外键的关系?怎么样?
答案 0 :(得分:0)
使用ModelBuilder。这是一个手动配置的示例:
https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration
答案 1 :(得分:0)
我认为您可以在不暴露模型中的链接类集合的情况下创建映射。但是,您可以将其设为私有。另外,到ICollection<int>
的映射将不起作用(即使可以,这意味着没有链接对象集合的映射)。
也许您可以尝试这样的事情:
public class House
{
[Key]
public int Id { get; set; }
private IEnumerable<HouseFeature> HouseFeatures { get; set; }
public ICollection<int> FeatureIds
{
get { return HouseFeatures.Select((hf) => hf.FeatureId).ToList(); }
}
}
class HouseFeatureConfiguration : IEntityTypeConfiguration<HouseFeature>
{
public void Configure(EntityTypeBuilder<HouseFeature> builder)
{
builder.HasKey(nameof(HouseFeature.FeatureId), nameof(HouseFeature.HouseId));
builder
.HasOne<House>()
.WithMany("HouseFeatures") // can't use nameof or expression because it's private member of the House
.HasForeignKey(nameof(HouseFeature.HouseId));
builder
.HasOne<Feature>()
.WithMany()
.HasForeignKey(nameof(HouseFeature.FeatureId));
}
}