Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ApplicationDbContext与自定义DbContext正确合并_C#_Asp.net Mvc_Entity Framework_Asp.net Identity - Fatal编程技术网

C# 如何将ApplicationDbContext与自定义DbContext正确合并

C# 如何将ApplicationDbContext与自定义DbContext正确合并,c#,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Asp.net Identity,我正试着做以下事情。。。当用户提交新的文章时,我希望在我的web应用程序中显示作者(用户)用户名。这就是为什么我需要“连接”这两个,我只希望有1个DbContext 现在我这样做: public class ApplicationDbContext : IdentityDbContext { public DbSet<ApplicationUser> ApplicationUsers { get; set; } private DbSet<Article>

我正试着做以下事情。。。当
用户
提交新的
文章
时,我希望在我的web应用程序中显示作者(用户)用户名。这就是为什么我需要“连接”这两个,我只希望有1个DbContext

现在我这样做:

public class ApplicationDbContext : IdentityDbContext
{
    public DbSet<ApplicationUser> ApplicationUsers { get; set; }
    private DbSet<Article> Articles { get; set; } // This line is all i have added/changed. Everything else was auto-generated when i created a new ASP.net MVC project with individual authentication in visual studio.

    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}
public类ApplicationDbContext:IdentityDbContext
{
公共数据库集应用程序用户{get;set;}
private DbSet Articles{get;set;}//这一行是我添加/更改的全部内容。其他所有内容都是在visual studio中创建具有个人身份验证的新ASP.net MVC项目时自动生成的。
公共应用程序上下文()
:base(“默认连接”)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}
但我不确定这样做是否正确。如何正确地做到这一点

更新(解释我对大卫回答的评论)

首先,我检索了如下用户列表:

class ApplicationUserService
{
    public List<ApplicationUser> GetUsers()
    {
        using (var dbContext = new ApplicationDbContext())
        {
            return dbContext.ApplicationUsers.ToList();
        }
    }
}
class ApplicationUserService
{
公共列表GetUsers()
{
使用(var dbContext=new ApplicationDbContext())
{
返回dbContext.ApplicationUsers.ToList();
}
}
}
而不是:

class ApplicationUserService
{
    public List<IdentityUser> GetUsers()
    {
        using (var dbContext = new ApplicationDbContext())
        {
            return dbContext.Users.ToList();
        }
    }
}
class ApplicationUserService
{
公共列表GetUsers()
{
使用(var dbContext=new ApplicationDbContext())
{
返回dbContext.Users.ToList();
}
}
}
问题是,由于这个错误,我无法获取用户名或任何其他属性。我在网上看了一些教程,没有人提到DbSet是用户。无论如何。。。现在我知道为什么我不需要这个属性了:

public DbSet<ApplicationUser> ApplicationUsers { get; set; }
公共数据库集应用程序用户{get;set;}
来自VS的这条消息帮助了我(适用于其他人,他们可能会遇到与我相同的问题):

“ApplicationDbContext.Users”隐藏继承的成员“IdentityDbContext.Users”。

如果您想使用一个上下文,并且标识表与“article”表位于同一数据库中,那么这很好。我通常喜欢重写OnModelCreating,以便为我创建的表添加映射/配置


根据应用程序的大小,我不使用标识上下文,而是为我的应用程序创建一个标识上下文(我可以包括Users表,以便更轻松地检索用户)。选择的问题。

如果您想使用一个上下文,并且标识表与“article”表位于同一数据库中,那么这很好。我通常喜欢重写OnModelCreating,以便为我创建的表添加映射/配置


根据应用程序的大小,我不使用标识上下文,而是为我的应用程序创建一个标识上下文(我可以包括Users表,以便更轻松地检索用户)。选择问题。

您的应用程序只需从正确版本的
IdentityDbContext
类继承即可。您需要使用通用类,以便可以使用自己的
IdentityUser
自定义用户类。所以你应该这样。请注意
ApplicationUsers
属性的新继承和删除。由于
Identity
类已经为您完成了此操作,因此此操作将被删除

public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
    private DbSet<Article> Articles { get; set; }

    public ApplicationDbContext()
    : base("DefaultConnection")
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

}
public类ApplicationDbContext:IdentityDbContext
{
私有DbSet项目{get;set;}
公共应用程序上下文()
:base(“默认连接”)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}

您的应用程序只需从正确版本的
IdentityDbContext
类继承即可。您需要使用通用类,以便可以使用自己的
IdentityUser
自定义用户类。所以你应该这样。请注意
ApplicationUsers
属性的新继承和删除。由于
Identity
类已经为您完成了此操作,因此此操作将被删除

public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
    private DbSet<Article> Articles { get; set; }

    public ApplicationDbContext()
    : base("DefaultConnection")
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

}
public类ApplicationDbContext:IdentityDbContext
{
私有DbSet项目{get;set;}
公共应用程序上下文()
:base(“默认连接”)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}

什么是
应用程序用户
?它是否继承自
IdentityUser
?什么是
ApplicationUser
?它是从
IdentityUser
继承的吗?那么,在您的情况下,如何从db获取用户详细信息呢?用户的DbSet名称是什么?我想现在知道了。请再次检查我的问题。请确认我现在的做法是正确的。非常感谢。那么,在您的案例中,我如何从db获得用户详细信息?用户的DbSet名称是什么?我想现在知道了。请再次检查我的问题。请确认我现在的做法是正确的。非常感谢。