Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# LINQ生成不完整的查询_C#_.net_Visual Studio_Entity Framework_Linq - Fatal编程技术网

C# LINQ生成不完整的查询

C# LINQ生成不完整的查询,c#,.net,visual-studio,entity-framework,linq,C#,.net,Visual Studio,Entity Framework,Linq,所以我有这个疑问 var pac = from p in context.pacientebi where p.personalid == piradinomeri select p; 它生成这个sql SELECT [Extent1].[id] AS [id], [Extent1].[name] AS [name], [Extent1].[surname] AS [surname], [Extent1].[dateofbirth] AS [dateofbirth], [Extent1].[p

所以我有这个疑问

var pac = from p in context.pacientebi where p.personalid == piradinomeri select p;
它生成这个sql

SELECT
[Extent1].[id] AS [id],
[Extent1].[name] AS [name],
[Extent1].[surname] AS [surname],
[Extent1].[dateofbirth] AS [dateofbirth],
[Extent1].[personalid] AS [personalid],
[Extent1].[phonenumber] AS [phonenumber],
[Extent1].[sqesi] AS [sqesi],
[Extent1].[address] AS [address],
[Extent1].[shemosvlisdro] AS [shemosvlisdro],
[Extent1].[email] AS [email]
FROM [dbo].[pacientis] AS [Extent1]
WHERE ([Extent1].[personalid] = @p__linq__0) OR (([Extent1].[personalid] IS NULL) AND (@p__linq__0 IS NULL))
如果我将表名更改为包含数据库名,则不返回任何值 像这样

FROM [dbo].[pacientis]
对此

[CachedeskBase].[dbo].[pacientis]
一切都很好。
那么为什么linq到slq会生成不完整的查询呢?

您可能需要按要求指定到datacontext的connectionstring


您可能需要按要求指定到datacontext的connectionstring


我知道是什么导致了你的问题

您应该检查当前连接字符串是否包含默认目录参数,并可能确保已设置应用程序的数据库用户默认数据库


在连接字符串中设置初始目录/数据库变量:
您可能未键入或忘记在连接字符串中包含

在连接字符串中包含
默认目录
,可以告诉数据库服务器使用哪个数据库来处理请求。(在本例中,您的LINQ/实体框架请求。)

以下是包含默认目录的连接字符串示例:

数据源=[您的服务器地址];初始目录=[本例中的数据库CachedeskBase];persist security info=[如果计划使用sql身份验证,则设置为false,否则为true];用户id=[您的默认用户];密码=[您的用户密码];MultipleActiveResultSets=True;App=EntityFramework
旁注:在生产环境甚至开发环境中,不应该包含普通的数据库用户名和密码。我建议您考虑一下是否计划部署此应用程序。使用应用程序池时,您不会为应用程序指定用户,因此也不会指定其密码。用户id和密码字段替换为
集成安全性
标签


设置应用程序的数据库用户默认数据库:
不建议执行此操作,因为您应该始终为用户提供一个默认目录/数据库,其中不包含任何潜在危险的数据。这主要是为了安全,因为您希望在潜在入侵者的路径中添加障碍。将应用程序的数据库设置为用户的默认数据库不应该是您希望发生的事情

由于有一个SQL server实例正在运行,因此我将使用SQL server作为示例

在中,转到数据库对象编辑器的
security
文件夹,然后在
logins
文件夹中双击用户。(如果您正在使用IIS应用程序池,请查找
IIS应用程序池\[您的应用程序池名称]

这将打开登录属性窗口,允许您设置用户的默认数据库。

我知道是什么导致了你的问题

您应该检查当前连接字符串是否包含默认目录参数,并可能确保已设置应用程序的数据库用户默认数据库


在连接字符串中设置初始目录/数据库变量:
您可能未键入或忘记在连接字符串中包含

在连接字符串中包含
默认目录
,可以告诉数据库服务器使用哪个数据库来处理请求。(在本例中,您的LINQ/实体框架请求。)

以下是包含默认目录的连接字符串示例:

数据源=[您的服务器地址];初始目录=[本例中的数据库CachedeskBase];persist security info=[如果计划使用sql身份验证,则设置为false,否则为true];用户id=[您的默认用户];密码=[您的用户密码];MultipleActiveResultSets=True;App=EntityFramework
旁注:在生产环境甚至开发环境中,不应该包含普通的数据库用户名和密码。我建议您考虑一下是否计划部署此应用程序。使用应用程序池时,您不会为应用程序指定用户,因此也不会指定其密码。用户id和密码字段替换为
集成安全性
标签


设置应用程序的数据库用户默认数据库:
不建议执行此操作,因为您应该始终为用户提供一个默认目录/数据库,其中不包含任何潜在危险的数据。这主要是为了安全,因为您希望在潜在入侵者的路径中添加障碍。将应用程序的数据库设置为用户的默认数据库不应该是您希望发生的事情

由于有一个SQL server实例正在运行,因此我将使用SQL server作为示例

在中,转到数据库对象编辑器的
security
文件夹,然后在
logins
文件夹中双击用户。(如果您正在使用IIS应用程序池,请查找
IIS应用程序池\[您的应用程序池名称]

这将打开登录属性窗口,允许您设置用户的默认数据库。

如果必须指定数据库,则表明您连接到了错误的数据库。此外,LINQ2SQL和Entity Framework是不同的产品,请仅指定您正在使用的产品如果单击“选择同一表上的前1000行”,则仅指定linq生成的查询不指定数据库名称生成的查询包括数据库名称linq生成的查询不指定数据库名称。那么我做错了什么?@giorgi SSMS可以包含它,因为当您右键单击一个表/视图并选择“查看前1000行”时,它知道该表属于哪个数据库。当您删除查询中的数据库指针时,它仍将工作,因为SSMS还将连接的/脚本的默认数据库设置为该数据库。通过查看SSMS窗口左上角的下拉菜单,可以查看/设置当前查询/连接/脚本指向的数据库。示例:。实体framwork无法知道表属于哪个数据库。谢谢
Dim connectionString = "Data Source=myserver;Initial Catalog=mydatabasename;Integrated Security=True"
Using ctx As New HRManagerDataContext(connectionString))
          Return (From us As User In ctx.Users
                 Where us.IsActive = True
                 Select us)
End Using