【发布时间】:2017-09-26 04:26:07
【问题描述】:
所以,在遵循@zadqvb8 在https://docs.microsoft.com/en-us/ef/core/modeling/relationships?hubRefSrc=email&utm_source=lfemail&utm_medium=email&utm_campaign=lfnotification#lf-content=177107930:682390858 中的善意建议后,我仍然无法完成这项工作。
在 Entity 中,在一侧 (A) 的一个实体和另一侧 (BCD...) 的多个不同实体之间建立和使用 Many2Many 关系,是否有人有真实的经验框架核心? (我们称结果表为“AB”)。
框架不支持开箱即用,并且解决方法不会产生在关系中创建的任何实际记录...
背景:标签是一侧的实体,另一侧是几个资产类别...我只是想为资产添加标签。所描述的解决方案不会在 (AB) 关系表中生成条目。
使用 SQLite,因为这是一个 UWP 应用...请不要讨厌。
--更新 2017-04-29 13:39 CET
非常感谢提供帮助。
为简单起见,我将发布在 ModelImage 和 ModelTag 之间创建 m2m 的代码:
public class ModelImage
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ModelImageId { get; set; }
public List<ModelImageTag> Tags { get; set; }
}
public class ModelTag
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ModelTagId { get; set; }
public List<ModelImageTag> Images { get; set; }
}
public class ModelImageTag
{
public int ModelImageId { get; set; }
public ModelImage ModelImage { get; set; }
public int ModelTagId { get; set; }
public ModelTag ModelTag { get; set; }
}
这些类还有更多,但我想这些属性就足够了
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ModelImageTag>().HasKey(x => new { x.ModelImageId, x.ModelTagId });
modelBuilder.Entity<ModelImageTag>().HasOne(x => x.ModelImage).WithMany(x => x.Tags).HasForeignKey(x => x.ModelTagId);
modelBuilder.Entity<ModelImageTag>().HasOne(x => x.ModelTag).WithMany(x => x.Images).HasForeignKey(x => x.ModelImageId);
}
这是添加关系的部分:
ModelImage image = ....;
ModelTag tag = ...;
ModelImageTag iTag = new ModelImageTag { ModelImage = image, ModelTag = tag};
tag.Images.Add(iTag);
image.Tags.Add(iTag);
Context.SaveChanges();
我尝试在 ModelImageTag 或实体引用中设置 ID,没有结果。
我错过了什么?非常感谢任何建议。
【问题讨论】:
-
你能发布你的实体和
OnModelCreating()吗? -
this页面有一个简单的例子
-
我们无法帮助您修复我们看不到的代码。
-
进行了编辑,请查看。
-
我更喜欢语法
modelBuilder.Entity<ModelImage>().HasMany(c => c.Tags).WithMany(i => i.Images).Map(t => t.MapLeftKey("ModelImageId).MapRightKey("ModelTagId").ToTable("ModelImageTag"));见here。不要认为您需要 Images.Add 和 Tags.Add 行。
标签: c# entity-framework sqlite uwp