shl*_*chz 11 c# entity-framework actor localdb azure-service-fabric
我有一个Actor,在收到来自WebAPI项目的请求后,Actor使用Entity Framework 6查询表.
using (var context = new MetadataContext())
{
var userStorageAccountId = context.Set<UsersToStorageAccounts>()
.Find(userId).StorageAccountId;
}
Run Code Online (Sandbox Code Playgroud)
使用"Add-Migration"..."Update-Database"命令成功创建了DB,并具有以下连接字符串:
@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFileName=C:\Users\xxxx\Metadata.mdf;Connect Timeout=30;Initial Catalog=Metadata;Integrated Security=True;"
Run Code Online (Sandbox Code Playgroud)
当我运行结构服务并且actor尝试访问上下文时,我得到以下异常:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:50 - 发生本地数据库运行时错误.无法创建自动实例.有关错误详细信息,请参阅Windows应用程序事件日志.)
并且事件查看器错误是:
无法获取本地应用程序数据路径.很可能没有加载用户配置文件.如果在IIS下执行LocalDB,请确保为当前用户启用了配置文件加载.
我找了一种加载用户配置文件的方法,但我只找到了IIS的解决方案.
请帮忙 :)
jms*_*era 21
由于服务结构在另一个用户下运行,您需要共享数据库并授予NETWORK SERVICE权限:
使用SqlLocalDB.exe命令行共享发出此命令的连接:
sqllocaldb share MSSqlLocalDB SharedDB
Run Code Online (Sandbox Code Playgroud)使用SQL Server Management Studio打开LocalDB并转到/ Security/Logins,添加NETWORK SERVICE本地帐户,并在User Mapping中将其添加为dbo (dbo.dbowner)到您的数据库
在连接字符串中使用共享名称,如下所示:
"Data Source=(localdb)\.\SharedDB;Initial Catalog=[YOUR DB];Integrated Security=SSPI;"
Run Code Online (Sandbox Code Playgroud)编辑在这里,您有一个我已添加到项目中的脚本,使用您的数据库名称更改databasename:
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';"
Run Code Online (Sandbox Code Playgroud)