C# 将LocalDB与服务结构一起使用

C# 将LocalDB与服务结构一起使用,c#,entity-framework,actor,localdb,azure-service-fabric,C#,Entity Framework,Actor,Localdb,Azure Service Fabric,我有一个参与者,在收到来自WebAPI项目的请求时,该参与者使用EntityFramework6查询表 using (var context = new MetadataContext()) { var userStorageAccountId = context.Set<UsersToStorageAccounts>() .Find(userId).StorageAccountId; } 当我运行

我有一个参与者,在收到来自WebAPI项目的请求时,该参与者使用EntityFramework6查询表

using (var context = new MetadataContext())
{
    var userStorageAccountId = context.Set<UsersToStorageAccounts>()
                                      .Find(userId).StorageAccountId;
}
当我运行fabric服务并且参与者尝试访问上下文时,我得到以下异常:

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:50-发生本地数据库运行时错误。 无法创建自动实例。有关错误详细信息,请参阅Windows应用程序事件日志。)

事件查看器错误为:

无法获取本地应用程序数据路径。 很可能没有加载用户配置文件。 如果在IIS下执行LocalDB,请确保为当前用户启用了配置文件加载

我寻找了一种加载用户配置文件的方法,但我只找到了IIS的解决方案


请帮助:)

关于service fabric中的IIS,我认为您无法在IIS中托管service fabric ASP.NET应用程序。这就是为什么当您创建无状态ASP.NET SF项目时,默认主机是Owin

,因为服务结构在另一个用户下运行,您需要共享数据库并授予
网络服务
权限:

  • 通过命令行共享您的连接,发出以下命令:

    sqllocaldb share MSSqlLocalDB SharedDB
    
  • 使用SQL Server Management Studio打开LocalDB并转到/Security/Logins,添加
    网络服务
    本地帐户,并在用户映射中将其作为dbo(dbo.dbowner)添加到数据库中

  • 在连接字符串中使用共享名称,如下所示:

    "Data Source=(localdb)\.\SharedDB;Initial Catalog=[YOUR DB];Integrated Security=SSPI;"
    
  • 编辑如果您有我添加到项目中的脚本,请使用数据库名称更改数据库名称:

    sqllocaldb create MSSQLLocalDB
    sqllocaldb start MSSQLLocalDB
    sqllocaldb share mssqllocaldb sharedlocal
    sqllocaldb stop MSSQLLocalDB
    sqllocaldb start MSSQLLocalDB
    
    "c:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S "(localdb)\.\sharedlocal" -d "databasename" -Q"create login [nt authority\network service] FROM windows with DEFAULT_DATABASE=databasename;use databasename;exec sp_addrolemember 'db_owner', 'nt authority\network service';"
    

    使用ServiceFabric的全部要点是在不考虑服务器的情况下轻松部署。LocalDB(一种在本地存储数据的进程内数据库)意味着您实际上想要修改服务器并与之绑定,因为您将无法移动到另一台机器而不丢失数据。除此之外,您的代码使用指向特定用户的db路径folder@PanagiotisKanavosLocalDB仅用于调试。如果服务结构在开发环境中运行,则使用LocalDB;如果服务结构在prod中运行,则使用mssql服务器db。为了调试的目的,我不能让它在本地工作。那就不要使用它。Service Fabric即使在本地也不会在您的帐户下运行,因此它无法访问您的用户目录。事实上,该错误表明服务结构在一个不允许配置文件加载的帐户下运行,即没有配置文件,即没有用户目录。为什么要使用LocalDB,而不是本地安装SQL Server?开发版本是free@PanagiotisKanavos我更喜欢轻量级解决方案,而不是安装sql express。。。如果不可能,那么我想我会使用它。@PanagiotisKanavos我实际上试图指定数据库的位置,但它仍然抛出了相同的异常。我收到的错误不知道我尝试使用服务结构运行LocalDB,因此,它的建议并不意味着SF可以与IIS一起工作。这个问题并不意味着他们正在使用或想要使用IIS。他们遇到的问题是,当他们在开发机器上运行Service Fabric群集时,他们在连接到托管在同一台机器上的数据库时遇到问题。这对我来说是可行的。除了我的连接字符串是
    数据源=(LocalDb)\。\SharedDB;初始目录=[您的数据库];集成安全性=真
    。非常感谢。我还必须停止/启动localdb实例才能使共享生效。掌声!剧本太棒了!
    sqllocaldb create MSSQLLocalDB
    sqllocaldb start MSSQLLocalDB
    sqllocaldb share mssqllocaldb sharedlocal
    sqllocaldb stop MSSQLLocalDB
    sqllocaldb start MSSQLLocalDB
    
    "c:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S "(localdb)\.\sharedlocal" -d "databasename" -Q"create login [nt authority\network service] FROM windows with DEFAULT_DATABASE=databasename;use databasename;exec sp_addrolemember 'db_owner', 'nt authority\network service';"