1

这个错误很奇怪。当我在 VS2008 中使用 LINQ to SQL 时,我没有遇到任何问题,但我现在在 VS2012 中,我发现了这种非常奇怪的情况。

首先,我有西班牙语的VS2012,所以复数设置为False。但是,即使将复数设置为 True,它也应该只影响类名,而不影响在数据库中实际执行的查询。

嗯......在介绍之后,我告诉你我在 SQL Server 数据库中有一个名为“Parametro”的表。我将 EF 模型添加到我的项目中,生成了一个名为“Parametro”的类。我添加了一个生成 ParametroDataContext 类的控制器。

第一个错误是上下文类包含一个名为“Parametroes”的属性(为什么即使我没有启用复数设置?)。

我将该属性重构为“Parametros”。

然后,我在控制器中运行以下查询:

object o = from p in ParametroContext.Parametros
           where p.par_codigo.Equals("LOGO")
           select p;

当我看到在数据库中执行的底层查询是:

SELECT *
FROM [dbo].[Parametroes] AS [Extent1]
WHERE N'LOGO' = [Extent1].[par_codigo]

如您所见,LINQ to SQL 已将表名更改为“Parametroes”。这让我陷入了困境

谁能向我解释这种不稳定的行为并提出解决方案?

谢谢詹姆

4

2 回答 2

1

最后,在创建控制器时,在连接下拉列表中,我没有创建新上下文,而是使用了创建 EDMX 文件时创建的相同连接。这解决了问题。

问候詹姆

于 2013-05-28T01:53:47.627 回答
1

在您的ParametroContext类中,覆盖该OnModelCreating(DbModelBuilder modelBuilder)方法并添加以下行:

        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
于 2013-05-28T00:27:01.617 回答