我有一个包含这些列
的表名LibraryInfo[libraryId] [smallint] IDENTITY(1,1) NOT NULL,
[libraryName] [nvarchar](200) NOT NULL,
[mId] [smallint] NOT NULL,
[description] [nvarchar](300) NULL,
[updatedBy] [int] NOT NULL,
[updatedAt] [datetime] NOT NULL
我设计了一个dbml文件来访问该表并创建一个方法,如下所示:
public List<LibraryInfo> GetLibraryInfos()
{
var context = new BookDataClassesDataContext(){ ObjectTrackingEnabled = false };
return context.LibraryInfos.ToList();
}
当我调用此方法时'return context.LibraryInfos.ToList();'告诉我'指定的演员表无效'。
有没有人帮助我。
答案 0 :(得分:0)
在将表/视图导入linq模型后,您可能更改了表或视图中的一种列数据类型。
只需重新导入它,以便自动生成的模型的数据类型与db结构相同。
答案 1 :(得分:-1)
我以前的答案显然不正确。但是:
这里似乎有不匹配的类型。 ToList()
表上的context.LibraryInfos
会返回LibraryInfos
个对象(List<LibraryInfos>
)而非List<LibraryInfo>
的列表。所以要么你的方法需要声明为
public List<LibraryInfos> GetLibraryInfos()
或返回项目的代码需要更改为
return context.LibraryInfo.ToList();
这实际上取决于你想要归还哪一个。
关于您对问题的评论:
context.LibraryInfo.ToList();给出错误,dbml文件不包含LibraryInfo的定义
显然,您的数据上下文中只有一个LibraryInfos
表。这意味着您需要将方法返回类型更改为List<LibraryInfos>
:
public List<LibraryInfos> GetLibraryInfos()
所以该方法现在读取
public List<LibraryInfos> GetLibraryInfos()
{
var context = new BookDataClassesDataContext(){ ObjectTrackingEnabled = false };
return context.LibraryInfos.ToList();
}
从表中获得的每个项都具有与表名匹配的类型,因为LibraryInfos
表实际上是LibraryItems
类型项的集合。
您可能因为编译器抱怨它不存在而创建了LibraryInfo
类 - 您需要决定是否可以从项目中删除它(在解决方案资源管理器中查找LibraryInfo.cs
文件)。但是你不能在LibraryInfos
表和LibraryInfo
类的项目之间进行转换。