实体框架:模型包含一个包含三个项目的列表(导航属性),type=本身,给出错误.(可能是外键映射错误)
本文关键字:错误 框架 出错 本身 映射 type 列表 项目 包含三 模型 导航 | 更新日期: 2023-09-27 18:05:07
我的模型是这样的
public class User
{
public int ID { get; set; }
public string Name { get; set; }
/*Users who are following current user*/
public virtual ICollection<User> Followers { get; set; }
/*Users whom current user is following*/
public virtual ICollection<User> Following { get; set; }
/*current user has ignored these users*/
public virtual ICollection<User> Ignores { get; set; }
}
添加数据
User john = new User { Name = "john" };
User mary = new User { Name = "mary" };
User david = new User { Name = "david" };
john.Following = new List<User> { mary };
mary.Followers = new List<User> { john};
john.Ignores = new List<User> { david};
context.Users.Add(john);
context.Users.Add(mary);
context.Users.Add(david);
context.SaveChanges();
这样做会给出错误:
无法确定依赖操作的有效排序。依赖关系可能由于外键约束、模型需求或存储生成的值而存在。
如果我从User
模型中删除属性Ignores
,它的工作完美,但忽略它不。
我认为有一些映射需要做,请建议我怎么做!!
问题似乎是EF不知道哪两个是多对多,哪一个是一对多。您可以尝试显式地说明这些,而不是依赖于惯例。尝试重写DbContext
类的OnModelCreating(DbModelBuilder)
方法(如果您正在使用DbContext)。
protected override void OnModelCreating(DbModelBuilder mb)
{
mb.Entity<User>()
.HasMany(u => u.Ignores)
.WithReequired()
.HasForeignKey(u => u.ID);
mb.Entity<User>()
.HasMany(u => u.Followers)
.WithMany(u => u.Following);
// If you want to specify a table, use the following line:
// .Map(m => m.ToTable("CustomManyToManyTableName");
}
注意:这是我的想法,所以不要依赖于我的语法和如此精确,但它应该非常接近。