Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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/6/entity-framework/4.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# EntityFramework从何处获取到本地数据库的连接字符串?_C#_Entity Framework_Asp.net Identity - Fatal编程技术网

C# EntityFramework从何处获取到本地数据库的连接字符串?

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

我已经创建了一个web表单,它是一个使用Identity的注册表单。表单调用的代码如下所示:

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获取连接字符串,并在传递给构造函数时使用该字符串