我在我的实体上有一处财产
GroceryItem
打电话
GroceryItemGroceryStores
它的唯一目的是让Entity Framework Core知道如何创建联接表。同一联接表的另一个实体
GroceryStore
有相同的属性。我其实不希望我的两个实体拥有这个属性,因为它只会导致一个永无止境的循环
GroceryItemGroceryStore
有一个
Establishment (GroceryStore)
它有一个
杂货店杂货店
哪个有相同的
机构(杂货店)
它将永远持续下去。如何删除该属性
食品杂货店食品杂货店
从…起
杂货店
和
杂货店
,但保留联接表?
具有无限深度的实体:
namespace Vepo.Domain
{
public class GroceryItem : AVeganItem<GroceryItemTag, GroceryStore>
{
[Required]
public string Name { get; set; }
[Required]
public string Brand { get; set; }
[Required]
public string Description { get; set; }
public string Image { get; set; }
[NotMapped]
public List<GroceryStore> Establishments { get; set; }
[NotMapped]
public virtual ICollection<GroceryItemGroceryStore> GroceryItemGroceryStores { get; set; }
}
}
namespace Vepo.Domain
{
[Serializable]
public abstract class AVeganItem<VeganItemTagType, EstablishmentType> : ADomainEntity<int>
{
[Required]
public int IsNotVeganCount { get; set; }
[Required]
public int IsVeganCount { get; set; }
[Required]
public int RatingsCount { get; set; }
[Required]
public int Rating { get; set; }
[Required]
public List<VeganItemTagType> Tags { get; set; }
[Required]
public int CurrentRevisionId { get; set; }
}
}
namespace Vepo.Domain
{
[Serializable]
public abstract class ADomainEntity<IdType>
{
public IdType Id { get; set; }
}
}
namespace Vepo.Domain
{
[Serializable]
public class GroceryStore : AEstablishment<GroceryItem>
{
public virtual ICollection<GroceryItemGroceryStore> GroceryItemGroceryStores { get; set; }
}
}
这是连接表。只需查看它的超类。正如你所看到的,它有几个额外的字段。也许这会让事情复杂化?
namespace Vepo.Domain
{
[Serializable]
public class GroceryItemGroceryStore : AVeganItemEstablishment<GroceryItem, GroceryStore>
{
}
}
namespace Vepo.Domain
{
[Serializable]
public abstract class AVeganItemEstablishment<VeganItemType, EstablishmentType> : ADomainEntity<int>
{
[Key, Column(Order = 0), Required]
public int VeganItemId { get; set; }
[Key, Column(Order = 1), Required]
public int EstablishmentId { get; set; }
public virtual VeganItemType VeganItem { get; set; }
public virtual EstablishmentType Establishment { get; set; }
[Required]
public int NotInEstablishmentCount { get; set; }
[Required]
public int InEstablishmentCount { get; set; }
[Required]
public double Price { get; set; }
}
}
数据库上下文:
modelBuilder.Entity<GroceryItemGroceryStore>()
.HasOne(gigs => gigs.VeganItem)
.WithMany(vi => vi.GroceryItemGroceryStores)
.HasForeignKey(gigs => gigs.VeganItemId);
modelBuilder.Entity<GroceryItemGroceryStore>()
.HasOne(gigs => gigs.Establishment)
.WithMany(e => e.GroceryItemGroceryStores)
.HasForeignKey(gigs => gigs.EstablishmentId);
modelBuilder.Entity<GroceryItemGroceryStore>(gigs =>
{
gigs.HasIndex(e => new { e.VeganItemId, e.EstablishmentId }).IsUnique();
});