C# EntityFramework从何处获取到本地数据库的连接字符串?
我已经创建了一个web表单,它是一个使用Identity的注册表单。表单调用的代码如下所示:C# EntityFramework从何处获取到本地数据库的连接字符串?,c#,entity-framework,asp.net-identity,C#,Entity Framework,Asp.net Identity,我已经创建了一个web表单,它是一个使用Identity的注册表单。表单调用的代码如下所示: protected void CreateUser_Click(object sender, EventArgs e) { var userStore = new UserStore<IdentityUser>(); var manager = new UserManager<IdentityUser>(userStore); var user = ne
protected void CreateUser_Click(object sender, EventArgs e)
{
var userStore = new UserStore<IdentityUser>();
var manager = new UserManager<IdentityUser>(userStore);
var user = new IdentityUser() { UserName = UserName.Text };
IdentityResult result = manager.Create(user, Password.Text);
if (result.Succeeded)
{
StatusMessage.Text = string.Format("User {0} was created successfully!", user.UserName);
}
else
{
StatusMessage.Text = result.Errors.FirstOrDefault();
}
}
protectedvoid CreateUser\u单击(对象发送方,事件参数e)
{
var userStore=new userStore();
var-manager=新的UserManager(userStore);
var user=new IdentityUser(){UserName=UserName.Text};
IdentityResult result=manager.Create(user、Password.Text);
if(result.successed)
{
StatusMessage.Text=string.Format(“成功创建了用户{0}!”,User.UserName);
}
其他的
{
StatusMessage.Text=result.Errors.FirstOrDefault();
}
}
我的web配置文件如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section
name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</configSections>
<system.web>
<authentication mode="Forms" />
<roleManager enabled="true" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我的机器上也安装了MS SQL Express。当我使用表单时,应用程序会在SQLExpress中创建一个名为DefaultConnection的数据库
我的问题是entity/identity/.net如何知道我的数据库,因为我没有在任何地方显式地编写连接字符串
若这是“约定优先于配置”的一个特性,那个么我怎样才能显式地将实体定向到另一个数据库
编辑:
我试着添加
<add name="MyConnection"
connectionString="[the connection string];TrustServerCertificate=False"
providerName="System.Data.SqlClient" />`
`
连接字符串并更新我的创建用户代码:
...
var connString = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
var context = new System.Data.Entity.DbContext(connString);
var userStore = new UserStore<IdentityUser>(context);
var manager = new UserManager<IdentityUser>(userStore);
...
。。。
var connString=ConfigurationManager.ConnectionString[“MyConnection”].ConnectionString;
var context=new System.Data.Entity.DbContext(connString);
var userStore=新的userStore(上下文);
var-manager=新的UserManager(userStore);
...
但这引发了一个带有以下消息的InvalidOperationException
:
附加信息:实体类型标识符不是当前上下文模型的一部分。
上次编辑:
了解了如何避免异常,更改了以下内容:
var context=newsystem.Data.Entity.DbContext(connString)代码>
为此:
var context=new Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext(connString)代码>按照惯例,将在本地SQL Server实例上创建本地数据库
见:
按照惯例,DbContext已经为您创建了一个数据库
- 如果本地SQL Express实例可用(默认情况下使用Visual Studio 2010安装),则代码首先在该实例上创建了数据库
- 如果SQL Express不可用,则“代码优先”将尝试使用LocalDb(默认情况下随Visual Studio 2012一起安装)
- 数据库以派生上下文的完全限定名命名
您可以通过在web.config
中指定一个显式连接字符串来解决此问题,如:
<configuration>
<connectionStrings>
<add name="MyDBContext"
connectionString="Data Source=SQLServerAddress;Integrated Security=SSPI;Initial Catalog=yourdbName"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
然后使用MyDBContext
作为配置中连接字符串的键
当然,您也可以在构造函数中传递连接字符串:
namespace MyCodeFirstProject
{
public class MyDBContext: DbContext
{
public MyDBContext() :
base("Data Source=SQLServerAddress;Integrated Security=SSPI;Initial Catalog=yourdbName") {}
}
}
按照约定,将在本地SQL Server实例上创建本地数据库
见:
按照惯例,DbContext已经为您创建了一个数据库
- 如果本地SQL Express实例可用(默认情况下使用Visual Studio 2010安装),则代码首先在该实例上创建了数据库
- 如果SQL Express不可用,则“代码优先”将尝试使用LocalDb(默认情况下随Visual Studio 2012一起安装)
- 数据库以派生上下文的完全限定名命名
您可以通过在web.config
中指定一个显式连接字符串来解决此问题,如:
<configuration>
<connectionStrings>
<add name="MyDBContext"
connectionString="Data Source=SQLServerAddress;Integrated Security=SSPI;Initial Catalog=yourdbName"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
然后使用MyDBContext
作为配置中连接字符串的键
当然,您也可以在构造函数中传递连接字符串:
namespace MyCodeFirstProject
{
public class MyDBContext: DbContext
{
public MyDBContext() :
base("Data Source=SQLServerAddress;Integrated Security=SSPI;Initial Catalog=yourdbName") {}
}
}
这种定制连接的方法适用于MVC项目,但这里我使用的是表单,所以我没有DbContext继承类,所有这些都内置于Identity中。我通过NuGet向一个空表单web应用程序添加了标识。我通过在名为DefaultConnection的
部分添加一个连接字符串来编辑连接字符串。是否有一种方法可以明确说明要使用哪个连接字符串?您可以通过构造函数传递连接,使用ConfigurationManager从web.config获取连接字符串,并在传递给构造函数时使用该方法。这种自定义连接的方法适用于MVC项目,但这里我使用的是表单,所以我没有DbContext继承类,所有这些都内置在Identity中。我通过NuGet向一个空表单web应用程序添加了标识。我通过在名为DefaultConnection的
部分添加一个连接字符串来编辑连接字符串。是否有一种方法可以显式说明要使用哪个连接字符串?您可以通过构造函数传递连接,使用ConfigurationManager从web.config获取连接字符串,并在传递给构造函数时使用该字符串