我与一些附加字段有多对多关系。但是由于将照片添加到可能适用于其他关系的多对多关系中,我想将其分开,以便我可以通过更改一对多关系来更改它。这是模型
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 代码中有一个错误,我添加了完整的子对象,这在我的情况下没有多大意义。
问我是否需要更详细的修复!
还有两件事:
- 我建议您为多对多关系使用额外的对象(如果您尚未执行此操作)。这将使您能够更好地控制表名称和您可能想要做的选择。
- 对属性使用 virtual 关键字,您不需要直接使用它(对于您的集合) - 这将允许 EF 对它们实现延迟加载。