Linqpad 可以将列与表名同名的表

问题描述 投票:0回答:2

大家好,我的 Linqpad 有一个小问题,数据库设置不佳

首先,我有一个数据库,其中创建者的表的列名称与他用作启用字段的表相同。

除此之外,这些表还有“内容”和“值”列。

尝试此操作后,如果表中有一个与表名称相同的列,则会将该列重命名为“内容”,如果它具有类似名称的列名,则将其重命名为“值”。

如果我然后尝试查询(如下),我会丢失与表具有相同列名的列。有谁知道有什么方法可以解决这个问题。因为这使得 linqpad 无法使用,因为这在我当前使用的所有数据库表中都很突出?

下面的例子

如果我有

TestTable Layout

   CREATE TABLE [dbo].[TestTable](
    [TestTableID] [int] NOT NULL,
    [TestTable] [varchar](max) NULL,
    [Content] [varchar](max) NULL,
    [Value] [varchar](max) NULL
) 

如你所见,我错过了专栏

enter image description here

linqpad
2个回答
3
投票

发生的情况是,如果您的表“foo”包含名为“foo”的字段,那么该字段将在 linqpad 中重命名为“content”。

在您的情况下,“内容”字段已经存在,因此您最终只能在上下文的表中创建两个字段之一(因此是“缺失”字段)。

作为解决方法,您可以尝试通过更改名称(表名称、字段名称、内容字段名称)来避免冲突,或者创建具有别名的视图以避免冲突。


1
投票

这让我花了一个小时的时间,但我想我找到了适合你的解决方案。

问题出在 Linqpad 本身的 Linq-To-Sql 提供程序上。如果您打开 Visual Studio 并根据数据库创建上下文类,您会注意到列

TestTable
被重命名为
TestTable1

因此,我为了利用这一点所做的就是创建一个“类库”类型的新项目 - 目标 Framework 4.0。

  1. 在此我添加了一个新的 Linq-to-Sql 类并将 TestTable 拖入其中。 enter image description here

  2. 进入你的class1.cs并插入:(我不知道这是否有必要)

    //I named my context L2S. Replace accordingly

    public L2SDataContext context = new L2SDataContext();

  3. 编译

  4. 使用键入的上下文添加到 Linqpad 的新连接! enter image description here

  5. 连接到您的服务器

  6. 查询! the result
© www.soinside.com 2019 - 2024. All rights reserved.