sql - Linq to SQL intellisense 不知道数据上下文对象中的表

标签 sql linq linq-to-sql datacontext

我可以使用我的数据上下文对象成功连接到数据库。我能够成功地读取和写入数据库,但是我不能使用其他人似乎正在使用的相同语法。

例如,当我想从一个表中获取数据时,我必须这样做:

db = new UserDataDataContext(WebConfigurationManager.ConnectionStrings["UserData"].ConnectionString);
IQueryable Users = db.GetTable<User>();

我希望能够像我看到其他人那样编写 linq 查询:

db = new UserDataDataContext(WebConfigurationManager.ConnectionStrings["UserData"].ConnectionString);
var query = from u in db.User
            where u.UserName == "Test"
            select u;

但 intellisense 无法将 User 识别为 db 的属性,因此无法编译。 Intellisense 不显示任何看起来与我的数据库的表或实体相关的属性。

这是我收到的错误消息:

'System.Data.Linq.DataContext' does not contain a definition for 'User' and no extension method 'User' accepting a first argument of type 'System.Data.Linq.DataContext' could be found (are you missing a using directive or an assembly reference?)

这是我正在做的事情的概要:

我使用了数据库设计器,将表格拖到我想要的位置。

然后我将它保存为 dbml 文件。

然后它为我创建了一个扩展 dataContext 的新类,名为 UserDataDataContext。然后我实例化一个名为 db 的 UserDataDataContext 的新实例,从 Web.config 传入我的连接字符串。

然后我尝试编写一个引用表名作为 db 对象属性的 linq 查询,但它无法识别它们。

与我读过的所有示例相比,我似乎找不到我做错了什么。有什么想法吗?

最佳答案

我确定您在某处有以下变量声明:

// variable is of type System.Data.Linq.DataContext
DataContext db;

将其更改为:

// variable is now of the appropriate subclass's type
UserDataDataContext db;

如果 db 是局部变量,并且您可以负担得起将初始化和声明一起内联,那么使用隐式类型会更好:

// db is implicitly of type UserDataDataContext
var db = new UserDataDataContext(WebConfigurationManager.ConnectionStrings["UserData"].ConnectionString);

C# 是一种安全静态 类型的语言。尽管您的引用所引用的对象确实在运行时具有您期望的属性,但编译器不会让此编译,因为这些属性在 上不存在变量的类型。

关于sql - Linq to SQL intellisense 不知道数据上下文对象中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061724/

相关文章:

c# - 从 C# 中的 LINQ 中提取 SQL 列扩展属性

linq - 类型转换和Linq Cast <T>()

c# - 如何有效地并行化 LINQ Except 方法

asp.net-mvc - 如何使用 linq2sql 存储库在我的 Asp.net Mvc 中实现缓存策略?

sql - 将 nvarchar 值 'CIS100 ' 转换为数据类型 int 时转换失败

c# - 用于选择包含所有字母的字符串的 Linq 语句

c# - LINQ 查询到 Visual Studio 2010 或 2012 中的 sql 查询生成器

mysql - 在SQL中选择交叉数据

mysql - 我有多个主键,我该如何处理格式?

sql - 在日期之间获取数据不准确