gpt4 book ai didi

c# - Entity Framework : Model Contain A list(navigational properties) of three items of type= itself , 给出错误。 (可能是外键映射错误)

转载 作者:行者123 更新时间:2023-11-30 22:36:24 25 4
gpt4 key购买 nike

我的模型是这样的

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");
}

注意:这是我凭空想出来的,所以不要完全依赖我的语法,但它应该非常接近。

关于c# - Entity Framework : Model Contain A list(navigational properties) of three items of type= itself , 给出错误。 (可能是外键映射错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com