C# 如何使用IdentityUser将一对多关系添加到webapi dotnet 3中使用as one的另一个实体

C# 如何使用IdentityUser将一对多关系添加到webapi dotnet 3中使用as one的另一个实体,c#,asp.net-core,asp.net-web-api,C#,Asp.net Core,Asp.net Web Api,如何建立一对多关系 用户之间:IdentityUser 将多个用户添加到一个UserClass 我试试这个 public class UserClass { public int UserClassId { get; set; } public virtual ICollection<User> Users { get; set; } } public class User : IdentityUser<int> { pub

如何建立一对多关系 用户之间:IdentityUser 将多个用户添加到一个UserClass

我试试这个

    public class UserClass
{
    public int UserClassId  { get; set; }
    public virtual ICollection<User> Users { get; set; }

}

    public class User : IdentityUser<int>
{

    public int UserClassId { get; set; }
    public UserClass UserClass { get; set; }
公共类UserClass
{
public int UserClassId{get;set;}
公共虚拟ICollection用户{get;set;}
}
公共类用户:IdentityUser
{
public int UserClassId{get;set;}
公共用户类用户类{get;set;}
}

然后尝试像这样的fluentapi

       builder.Entity<UserClass>()
            .HasMany<User>(u=>u.Users)
            .WithOne(p=>p.UserClass)
            .HasForeignKey(p=>p.UserClassId);
builder.Entity()
.HasMany(u=>u.Users)
.WithOne(p=>p.UserClass)
.HasForeignKey(p=>p.UserClassId);

同样不起作用,谢谢

我建议的第一件事是命名您的
用户
应用程序用户
,因为这是扩展
标识用户
模型时的推荐做法。此命名标准有助于防止应用程序增长时可能出现的命名冲突。在这个答案和示例代码中,我将您的
User
类称为
ApplicationUser
。另外,我假设您在这个场景中使用的是实体框架核心。如果您正在使用其他ORM,则您的里程数可能会有所不同

有几种方法可以定义
UserClass
ApplicationUser
之间的多对一关系。最简单的解决方案是创建一个完全定义的关系,这基本上是您已经完成的

公共类UserClass
{
public int UserClassId{get;set;}
公共数字


编辑:添加约束配置示例。

我建议的第一件事是命名您的
用户
应用程序用户
,因为这是扩展
标识用户
模型时的推荐做法。此命名标准有助于防止应用程序增长时可能出现的命名冲突。我将参考在本答案和示例代码中,请将您的
User
分类为
ApplicationUser
。此外,我假设您在此场景中使用的是Entity Framework Core。如果您使用的是另一个ORM,则您的里程数可能会有所不同

有几种方法可以定义
UserClass
ApplicationUser
之间的多对一关系。最简单的解决方案是创建一个完全定义的关系,这基本上是您已经完成的

公共类UserClass
{
public int UserClassId{get;set;}
公共数字


编辑:添加约束配置示例。

首先感谢亲爱的,当我尝试在数据库中的表中添加约束时,它被添加了。我收到此错误Microsoft.EntityFrameworkCore.Update[10000]保存对上下文类型“MyGroupAPI.Data.DataContext”的更改时,数据库中发生异常。Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时出错。有关详细信息,请参阅内部异常。-->Microsoft.Data.Sqlite.SqliteException(0x80004005):SQLite错误19:“外键约束失败”。@mohamedhemeda听起来您可能必须为关系定义外键约束。您必须配置是否需要关系以及要使用的删除行为。我将使用其他配置值更新我的示例。这里是指向此spe的文档的链接cific主题。@mohamedhemeda您可以参考我使用附加约束配置编辑的示例。请注意您选择使用的
OnDelete
行为。我在示例中使用了默认的级联行为。如果相关的
ApplicationUser
实体的
UserClass
为del,则这将导致相关的
ApplicationUser
实体被删除您可能不希望在应用程序中出现这种行为,因此请阅读各种选项。还记得更新您的迁移!非常感谢,但在尝试在用户表上添加数据时,以及在我更改isRequired时,仍然会出现相同的错误(false);我正在使用sqlite@mohamedhemeda我认为问题在于EF Core SQLite提供程序的局限性。如果你必须使用SQLite,有一些解决局限性的方法。我建议你考虑获得一个免费的Azure或AWS帐户,这样你就可以设置一个免费的云SQL数据库。在开发应用程序时给你更多的灵活性。以下是这是指向SQLite解决方案的链接。首先,亲爱的,谢谢。当我尝试在数据库中的表中添加时,它被添加了。我收到此错误Microsoft.EntityFrameworkCore.Update[10000]保存对上下文类型“MyGroupAPI.Data.DataContext”的更改时,数据库中发生异常。Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时出错。有关详细信息,请参阅内部异常。-->Microsoft.Data.Sqlite.SqliteException(0x80004005):SQLite错误19:“外键约束失败”。@mohamedhemeda听起来您可能必须为关系定义外键约束。您必须配置是否需要关系以及要使用的删除行为。我将使用其他配置值更新我的示例。这里是指向此spe的文档的链接cific主题。@mohamedhemeda您可以参考我使用附加约束配置编辑的示例。请注意您选择使用的
OnDelete
行为。我在示例中使用了默认的级联行为。如果相关的
ApplicationUser
实体的
UserClass
为del,则这将导致相关的
ApplicationUser
实体被删除您可能不希望在应用程序中出现这种行为,因此请阅读各种选项。还记得更新您的迁移!非常感谢,但在尝试在用户表上添加数据时,以及在我更改isRequired时,仍然会出现相同的错误(false);我正在使用sqlite@mohamedhemeda我认为问题在于EF Core SQLite提供程序的局限性。如果你必须使用SQLite,有一些解决局限性的方法。我建议你考虑获得一个免费的Azure或AWS帐户,这样你就可以