在ASP.Net Core/EF Core中,当一个Identity User类和自定义定义的类之间存在多对多关系时,可能会出现堆栈溢出问题。这通常是由于循环引用导致的。
要解决这个问题,可以尝试以下解决方法:
确保在Identity User类和自定义定义的类之间只存在一对多关系,而不是多对多关系。多对多关系通常需要通过一个中间表来实现,而在Identity User类中已经实现了这个中间表。因此,将多对多关系转换为一对多关系可以避免循环引用。
如果确实需要实现多对多关系,可以通过在自定义定义的类中使用一个集合来代替直接引用Identity User类。例如,在自定义定义的类中创建一个名为"Users"的集合属性,用于存储与该类相关联的Identity User对象。然后,在Identity User类中创建一个集合属性来存储与该用户相关联的自定义定义的类对象。
示例代码如下:
public class CustomClass
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection Users { get; set; } // 与Identity User类相关联的集合属性
}
public class ApplicationUser : IdentityUser
{
public ICollection CustomClasses { get; set; } // 与自定义定义的类相关联的集合属性
}
然后,使用以下代码配置多对多关系:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(c => c.Users)
.WithMany(u => u.CustomClasses)
.UsingEntity(j => j.ToTable("CustomClassUser")); // 使用中间表来实现多对多关系
}
通过这种方式,你可以在Identity User类和自定义定义的类之间实现多对多关系,而不会出现堆栈溢出问题。
希望这些解决方法对你有帮助!
上一篇:ASP.NET Core/.NET Core(预览5)的源代码在哪里?
下一篇:ASP.NET Core/Razor Pages Cookie Consent,“Context”在当前上下文中不存在。