将一对多连接添加到多对多



我与一些附加字段有多对多关系。但是由于将照片添加到可能适用于其他关系的多对多关系中,我想将其分开,以便我可以通过更改一对多关系来更改它。这是模型

public class Segment
{
    public int SegmentId { get; set; }
    public int ConnectionPointIdEnd { get; set; }
    public string ConnectionName { get; set; }
    public string ConnectionInformation { get; set; }
    public string Image { get; set; }
    public string Direction { get; set; }
    public ICollection<ConnectionPointRoute> ConnectionPointRoutes { get; set; }
}
public class ConnectionPointRoute
{
    public int ConnectionPointId { get; set; }
    public int RouteId { get; set; }
    public int SegmentId { get; set; }
    public  int Position { get; set; }
    public ConnectionPoint ConnectionPoint { get; set; }
    public Route Route { get; set; }
    public Segment Segment { get; set; }
}

模型构建器如下所示:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<ConnectionPointRoute>()
            .HasKey(c => new { c.ConnectionPointId, c.RouteId, c.SegmentId });
        modelBuilder.Entity<ConnectionPoint>()
            .HasMany(c => c.ConnectionPointRoutes)
            .WithRequired(x => x.ConnectionPoint)
            .HasForeignKey(c => c.ConnectionPointId);
        modelBuilder.Entity<Route>()
            .HasMany(c => c.ConnectionPointRoutes)
            .WithRequired(x => x.Route)
            .HasForeignKey(c => c.RouteId);
        modelBuilder.Entity<Segment>()
            .HasMany(c => c.ConnectionPointRoutes)
            .WithRequired(x => x.Segment)
            .HasForeignKey(c => c.SegmentId);
    }

这一切都适用于获取项目,但由于某种原因,它不允许我发布新的路线,例如,它让我出错:

"违反了多重性约束。角色 关系的"Segment_ConnectionPointRoutes_Source" "InBuildingNavigator.Data.Models.Segment_ConnectionPointRoutes"有 多重性 1 或 0..1。

有什么想法吗?

修复此问题!我的 Post 代码中有一个错误,我添加了完整的子对象,这在我的情况下没有多大意义。

问我是否需要更详细的修复!

还有两件事:

  1. 我建议您为多对多关系使用额外的对象(如果您尚未执行此操作)。这将使您能够更好地控制表名称和您可能想要做的选择。
  2. 对属性使用 virtual 关键字,您不需要直接使用它(对于您的集合) - 这将允许 EF 对它们实现延迟加载。

相关内容

  • 没有找到相关文章

最新更新