【问题标题】:C# Why is Linq crashing about a Null if the value is not null?C# 如果值不为空,为什么 Linq 会因空值而崩溃?
【发布时间】:2012-03-07 06:18:54
【问题描述】:

我有一个简单的三表参考。它看起来很简单。那里的关联是在 DBML 中创建的。它们实际上不是表定义中的外键。为什么?这是一个很长的故事。相信我,当我说,我已经打过那场战斗并且失败了。

当我尝试使用 LINQ 添加新的 FileType 记录时,它崩溃并出现以下错误:无法将值 NULL 插入 Id 列、FileType 表。

            _fileType = new FileType()
            {
                Id = def.ID, // This is the integer "1"
                Name = def.Name,
                FileCategoryId = def.Category.ID,
                DateLabel = def.DateLabel,
                FileNamePrefix = def.Prefix,
                FolderName = def.Folder,
                CreateInspection = 0
            };

            try
            {
                dc.FileTypes.InsertOnSubmit(_fileType);
                dc.SubmitChanges();
            }
            catch (Exception ex) 
            {
                MessageBox.Show(ex.Message); 
            }

但是,如果您会注意到代码,则 Id 正在设置中。我检查了该值,它不为空。它是一个整数。我错过了什么或做错了什么?

我确实检查以确保存在正确 ID 的 FileCategory 记录。我还有什么遗漏的吗?

【问题讨论】:

  • 它可能是一个自动增量字段吗?在这种情况下,您不必为插入记录设置 ID。
  • 没有。我确保它只是一个字段。它没有为它定义身份规范。我把它当作一个键来使用,但实际上,它只是一个整数。使用 Management Studio,我可以随意设置和更改字段。
  • 你能告诉我们从这段代码生成的 T-SQL 吗?
  • 那么 FileType 只是一个没有任何约束的普通表?像创建表文件类型(ID int not null 主键,... CreateInspection int not null)
  • 在您的表映射中,该字段是否在“属性”窗格中标记为“自动生成的值”?我之前遇到过插入/更新问题...

标签: c# linq linq-to-sql


【解决方案1】:

我以前见过这样的东西。

当您只分配“id”而不是相关对象时会发生这种情况。

尝试以下方法:

new FileType
{
  FileCategory = def.Category,
  ...
}

【讨论】:

  • 我好像每次都忘记了。感谢您的提醒。 :)
【解决方案2】:

在您的表映射中,字段是否标记为“自动生成的值” 在“属性”窗格中?我有插入/更新问题 之前... – Tieson T. 3 月 7 日 6:52

我会为此给他道具,但他将此作为评论留下,而不是官方答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多