在.NET 4.5.1中設置ASP.NET Identity ConnectionString屬性

[英]Set ASP.NET Identity ConnectionString property in .NET 4.5.1


So basically after finally learning how to change OpenAuth to not use DefaultConnection in .NET 4.5, I've moved on to 4.5.1, rendering those learnings moot. The duties of AuthConfig.cs now reside in Startup.Auth.cs, The static methods of OpenAuth have been abstracted away and therefore I can no longer change the default value of OpenAuth.ConnectionString directly.

所以基本上在最后學習如何將OpenAuth改為不在.NET 4.5中使用DefaultConnection之后,我已經轉到了4.5.1,這些知識沒有實際意義。 AuthConfig.cs的職責現在位於Startup.Auth.cs中,OpenAuth的靜態方法已被抽象出來,因此我無法再直接更改OpenAuth.ConnectionString的默認值。

What is the best practice for changing Membership's connection string/database in .NET 4.5.1?

在.NET 4.5.1中更改成員身份的連接字符串/數據庫的最佳做法是什么?

2 个解决方案

#1


13  

I have followed the approach you suggested and it worked for me. However, there were few things mostly syntactic and naming issues which happened to be different. I think these differences are due to probably the different versions of Visual Studios we used (rather than .NET - my version is release one with .NET 4.5.1). I continue with a description of my specific solution.

我遵循了你建議的方法,它對我有用。然而,幾乎沒有什么東西,語法和命名問題恰好是不同的。我認為這些差異可能是由於我們使用的Visual Studio的不同版本(而不是.NET - 我的版本是.NET 4.5.1的發布版本)。我繼續描述我的具體解決方案。

My goal was to have a single DB context with which I can access both User or Identity related data and also my custom application data. To achieve this I completely deleted class ApplicationDbContext which is automatically created for you when you create a new project.

我的目標是擁有一個數據庫上下文,我可以使用該上下文訪問用戶或身份相關數據以及我的自定義應用程序數據。為了實現這一點,我完全刪除了在創建新項目時自動為您創建的ApplicationDbContext類。

Then, I created a new class MyDbContext.

然后,我創建了一個新類MyDbContext。

public class MyDbContext: DbContext
{
    public MyDbContext() : base("name=DefaultConnection")
    {

    }

    //
    // These are required for the integrated user membership.
    //
    public virtual DbSet<IdentityRole> Roles { get; set; }
    public virtual DbSet<ApplicationUser> Users { get; set; }
    public virtual DbSet<IdentityUserClaim> UserClaims { get; set; }
    public virtual DbSet<IdentityUserLogin> UserLogins { get; set; }
    public virtual DbSet<IdentityUserRole> UserRoles { get; set; }

    public DbSet<Movie> Movies { get; set; }
    public DbSet<Order> Orders { get; set; }
    public DbSet<Purchase> Purchases { get; set; }
}

The fields Roles, Users, UserClaims, UserLogins, UserRoles are as suggested required for the membership management. However, in my case their types have different names (ApplicationUser instead of User, IdentityUserClaim instead of UserClaim and etc.). I suppose that was the reason why Antevirus had the "User could not be found" problem.

Roles,Users,UserClaims,UserLogins,UserRoles字段是成員資格管理所需的建議。但是,在我的情況下,他們的類型有不同的名稱(ApplicationUser而不是User,IdentityUserClaim而不是UserClaim等)。我想這就是為什么Antevirus有“無法找到用戶”的問題。

Also, as we see in my case there are 5 such fields rather than 8. Probably, this is due to the different versions of the Visual Studio.

另外,正如我們在案例中看到的那樣,有5個這樣的字段而不是8個。可能這是由於Visual Studio的不同版本。

The last change which I made was in class AccountController and it reflects the use of the new context MyDbContext. Here I passed an instance of MyDbContext instead of ApplicationDbContext

我做的最后一個更改是在AccountController類中,它反映了新上下文MyDbContext的使用。在這里,我傳遞了MyDbContext的實例,而不是ApplicationDbContext

Before

之前

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}

After

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDbContext())))
{
}

#2


8  

Release Candidate

Works with Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1

適用於Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1

In the parameterless constructor for AccountController, change the line

在AccountController的無參數構造函數中,更改該行

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

to

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new DefaultIdentityDbContext("YourNameOrConnectionString")));

and you're good to go.

你很高興。

Release

Works with Microsoft.AspNet.Identity.EntityFramework 1.0.0

適用於Microsoft.AspNet.Identity.EntityFramework 1.0.0

Similar to what we did for release candidate, but we do this in a different place. Open IdentityModels.cs that was created as part of the VS template and add the following constructor to the ApplicationDbContext class:

與我們為候選版本所做的類似,但我們在不同的地方執行此操作。打開作為VS模板的一部分創建的IdentityModels.cs,並將以下構造函數添加到ApplicationDbContext類:

public ApplicationDbContext(string nameOrConnectionString)
    : base(nameOrConnectionString)
{
}

and you can now change the parameterless constructor in AccountController from

現在,您可以更改AccountController中的無參數構造函數

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}

to

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext("YourNameOrConnectionString"))))
{
}

and your done.

你完成了。


注意!

本站翻译的文章,版权归属于本站,未经许可禁止转摘,转摘请注明本文地址:https://www.itdaan.com/blog/2013/10/11/7dee18283e9c4fac25449857f5f6f5c9.html



 
粤ICP备14056181号  © 2014-2020 ITdaan.com