我可以使用我的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传入我的连接字符串。
然后我尝试编写一个linq查询,引用表名作为db对象的属性,但它不识别它们。
与我读过的所有例子相比,我似乎无法找到我做错的事情。有什么想法吗?
答案 0 :(得分:4)
我确定你在某处有以下变量声明:
// 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#是安全和静态类型语言。虽然您的引用引用的对象确实在运行时具有您期望的属性,但编译器不会让这个编译,因为上不存在这些属性变量的类型。