【发布时间】:2016-03-23 02:58:25
【问题描述】:
在与 Entity Framework 建立多对多关系时,我遇到了一个小问题。我尝试通过 ConnectionPointRoute 在 ConnectionPoint 和 Route 之间建立多对多关系。但是在执行数据库更新(运行种子)时,我收到消息“检测到冲突的更改。这可能在尝试使用相同的键插入多个实体时发生。”。我可能只是忽略了一些东西,但感谢任何帮助!
public class ConnectionPoint
{
public int ConnectionPointId { get; set; }
public string ConnectionPointName { get; set; }
public virtual Location Location { get; set; }
public virtual ICollection<ConnectionPointRoute> ConnectionPointRoutes { get; set; }
public virtual ICollection<Connection> Connections { get; set; }
}
public class Route
{
public int RouteId { get; set; }
public string RouteName { get; set; }
public virtual ICollection<ConnectionPointRoute> ConnectionPointRoutes { get; set; }
}
public class ConnectionPointRoute
{
public int ConnectionPointId { get; set; }
public int RouteId { get; set; }
public int Position { get; set; }
public virtual ICollection<ConnectionPoint> ConnectionPoints { get; set; }
public virtual ICollection<Route> Routes { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<ConnectionPointRoute>()
.HasKey(c => new { c.ConnectionPointId, c.RouteId });
modelBuilder.Entity<ConnectionPoint>()
.HasMany(c => c.ConnectionPointRoutes)
.WithRequired()
.HasForeignKey(c => c.ConnectionPointId);
modelBuilder.Entity<Route>()
.HasMany(c => c.ConnectionPointRoutes)
.WithRequired()
.HasForeignKey(c => c.RouteId);
}
var ConnectionPointRoutes = new List<ConnectionPointRoute>
{
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 1},
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 2},
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 2},
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 1}
};
ConnectionPointRoutes.ForEach(r => context.ConnectionPointRoutes.AddOrUpdate(r));
context.SaveChanges();
【问题讨论】:
-
我怀疑 EF 是否支持具有自动增量功能的复合键 - 默认值为 DatabaseGeneratedOption.None,因此它将这些条目按原样发送到数据库(所有键列都设置为 default(int)=0 ),并且您会期望会发生此错误。设置键以更正不同的值或编辑键以解决此问题。
-
对不起,我好像没关注你,你能说得具体一点吗?提前致谢!
-
我认为您遇到了与此相同的问题:stackoverflow.com/questions/14751898/…
-
我在那里没有得到答案,我觉得我的问题更复杂。我的猜测是实体需要一个标识符,但我没有用它,因为它只是一个关系字段
标签: c# entity-framework entity-framework-6