【问题标题】:Is this a spurious warning when using LINQ to SQL?这是使用 LINQ to SQL 时的虚假警告吗?
【发布时间】:2010-02-01 16:09:16
【问题描述】:

根据我见过的许多 LINQ 示例,我正在使用类似于以下代码的代码创建自己的数据上下文和表:

class MyDatabase : DataContext {
  public Table<Widget> Widgets;
  public Table<Car> Cars;

  public MyDatabase (string connection) : base(connection) { } 
}

但对于每个表(小部件、汽车等),我都会收到警告从未分配字段“表名”。我在谷歌上找不到任何人也有这个问题。我不觉得我做错了什么,因为我只是在复制我从不同地方看到的 LINQ 示例。那么这个警告是怎么回事?它是在警告我一个真正的问题吗?还是我错过了什么?

【问题讨论】:

    标签: c# sql linq linq-to-sql


    【解决方案1】:

    是的,它们是虚假的。*

    this other question about how DataContext works 中,我们了解到DataContext 的构造函数在运行时使用反射来填充字段。因此,Visual Studio 会根据它在编译时掌握的知识向您发出警告。它不知道最终这些字段在被消费之前被填充。

    *根据其他人对 SO 的评论进行回答。甚至可能是错误的!

    【讨论】:

    • 没有错,是的:警告不正确:确实,编译器无法检测到反射。
    【解决方案2】:

    警告是有效的,因为您已经为 Widgets 和 Cars 创建了定义,但它们没有被分配。这应该在您构建数据上下文时自行解决。你最终会引用它们。

    【讨论】:

    • 您能详细说明一下吗?我已经通过阅读它们来使用小部件和汽车。我认为它们是由 LINQ 框架自动填充的。那么这个警告什么时候会消失呢?
    • 我刚刚检查了我的代码。我还编写了自己的数据上下文对象。以下是我对每个编码的方式(抱歉,我无法正确格式化) /// 表示基础数据库中的 Master.Enterprise 表。 public Table Enterprise { get { return GetTable(); } }
    • 你可以编辑你的答案,让我们大家更容易阅读。
    【解决方案3】:

    您可以通过在声明后将它们分配为 null 来解决此问题。

    评论回复 - 这不必与声明在同一行 - 在声明之后和使用之前的任何位置。同一行很常见,并且经常用于初始化程序,这是需要的,也是编译器抱怨的原因。

    【讨论】:

    • 你的意思是和声明在同一行? Resharper 说这是多余的。
    • 这是多余的。它们默认为空。
    • 好吧,我想你必须在编译器警告和 Resharper 警告之间做出选择,或者(正如 Randy 所说)等到你完成课程并且它们不再是存根了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    相关资源
    最近更新 更多