Asp.net 为DataContext类构造连接字符串

Asp.net 为DataContext类构造连接字符串,asp.net,sql,sql-server-2008,f#,f#-interactive,Asp.net,Sql,Sql Server 2008,F#,F# Interactive,我看到了几个DataContext连接字符串问题。我将尝试区分这一点: 如何构造到数据库的通用连接字符串,localhost | User PC\User | Some数据库。。。(由Microsoft SQL 2008托管/管理) 我注意到它是可识别的。因此,如果有多个用户访问我的站点,我的代码一次只能访问一个数据库实例,并且必须等待每个实例被释放,以便每个用户的数据保持一致 是否有可能在F#Interactive中以某种方式启用LINQ,并从那里连接到数据库?我不知道如何将System.Da

我看到了几个DataContext连接字符串问题。我将尝试区分这一点:

  • 如何构造到数据库的通用连接字符串,localhost | User PC\User | Some数据库。。。(由Microsoft SQL 2008托管/管理)

  • 我注意到它是可识别的。因此,如果有多个用户访问我的站点,我的代码一次只能访问一个数据库实例,并且必须等待每个实例被释放,以便每个用户的数据保持一致

  • 是否有可能在F#Interactive中以某种方式启用LINQ,并从那里连接到数据库?我不知道如何将System.Data dll启用/加载到fsi中。也许这是我的安装所独有的,或者它是一个普通线程?(即,我的安装也无法识别windows.base.dll--我必须从程序\引用程序集手动获取它)

  • 不管怎么说,我已经非常确凿地发现了这一点

    let x=new System.Data.Linq.DataContext(“localhost”)
    
    …不起作用

    1) 如何构造到数据库的通用连接字符串

    没有构造连接字符串的通用方法。最好的做法是将连接字符串保存在某个配置文件中,您可以根据自己的配置(SQL Server计算机的名称、身份验证选项,无论是基于文件的数据库还是普通数据库)对其进行更改。有一个问题

    2) 我注意到它是可识别的。因此,如果有多个用户访问我的站点,我的代码一次只能访问一个数据库实例[…]

    不,这不是
    DataContext
    的工作方式。
    DataContext
    不会保持与服务器的实时连接,这会阻止其他任何人使用SQL server。它保留一些状态(即已获取的缓存实体),并使用以确保状态一致(如果需要,可以使用事务来阻止其他连接)

    3) 是否有可能以某种方式在F#-Interactive[…]中启用LINQ

    这不应该是个问题。您可以在F#interactive中使用
    #r“foo.dll”
    引用程序集。F#2.0的典型方法是使用C#工具生成数据上下文,然后直接引用它(对于F#3.0,事情更简单,因为您可以只使用类型提供程序)

    如果在C#中为
    Northwind
    生成LINQ to SQL数据上下文,则F#交互使用如下所示:

    #r@“\Northwind.dll”
    #r“System.Data.Linq.dll”
    开放北风
    打开Microsoft.FSharp.Linq
    让connStr=@“数据源=。\SQLEXPRESS;AttachDbFilename=\NORTHWND.MDF;”+
    @“集成安全性=True;用户实例=True”
    let操作()=
    //使用“use”确保在最后处理它
    使用db=新的NorthwindDataContext(connStr)
    //对数据库做些什么
    
    构造连接字符串实际上有一种比较通用的方法:

    open System.Data.Common
    open System.Data.SqlClient
    让providerName=“System.Data.SqlClient”
    let factory=dbProviderFactorys.GetFactory(providerName)
    让cnBuilder=factory.CreateConnectionStringBuilder():?>SqlConnectionStringBuilder
    
    cnBuilder.DataSource我的方法是使用1个连接字符串,然后将其用于所有DataContext连接。因此,此代码基于MyConnString构建EntityConnectionString:

    protected override MyEntities CreateObjectContext()
       {
          string ConnString =ConfigurationManager.ConnectionStrings["MyConnString"];
    
          string seConn = ConfigurationManager.ConnectionStrings["MyEntities"].ToString();
    
          EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder(seConn);
          ecsb.ProviderConnectionString = ConnString;
    
          EntityConnection ec = new EntityConnection(ecsb.ToString());
    
          ScheduleEntities ctx = new ScheduleEntities(ec);
    
          return ctx;
    
    }
    

    谢谢你,伙计。这正是我想要的:在计算机和我可能放入自定义配置文件中的人类可读内容之间有一个缓冲区。