.net - 为什么 HasLoadedOrAssignedValue 属性设置为 true?

标签 .net linq-to-sql .net-3.5

这是场景:

  • VS 2008 .NET
  • 3.5 SP1
  • LINQ 到 SQL

  • 我有一个 Product Entity,它有一个 ImageID 字段,所以它与 Image Entity 有关系。这都是在模式和 DBML 中定义的。
    现在,假设我创建了一个没有 ImageID 的新 Product 实体,并将其保存到数据库中。此时,实体的 _Image 字段已将 HasLoadedOrAssignedValue 设置为 false,这是应该的。
    现在,当我从数据库中检索该实体时,没有 ImageID,即 ImageID 设置为 null,并且附加到它的 Image Entity 也设置为 null,HasLoadedOrAssignedValue 设置为 true。为什么?
    现在,当我尝试将 ImageID 属性设置为有效的整数时,我得到一个 ForeignKeyReferenceAlreadyHasValueException异常(exception)。
    现在,我知道人们说,“哦,你必须设置关系属性本身,所以,Product.Image = someImage,而不是 Product.ImageID = 2”,但我总是设置 ID 字段,它总是有效..嗯,几乎总是这样。
    所以,我的问题是双重的:
  • 为什么 HasLoadedOrAssignedValue 不应该设置为 true?
  • 更重要的是,为什么我会遇到这种语无伦次的行为。我知道您并不总是必须直接设置实体属性,那么为什么这次不起作用?如果这是 LINQ to SQL 规则,那么为什么有时会破坏规则?
  • 最佳答案

    问题是正在查看 Image 属性并导致它加载 - 甚至可能是调试器。

    在 Product.Image 属性中设置断点并查看导致它的路径。

    关于.net - 为什么 HasLoadedOrAssignedValue 属性设置为 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1124023/

    相关文章:

    json - 如何在另一个 JObject 中循环动态 JObject?

    .net - 在已部署的ASP.NET网站项目上,是否可以在不重新编译的情况下更新.resx文件?

    .net - 线程.定时器问题

    c# - 正则表达式在测试器中有效,但在我的代码中无效

    c# - SQLite:设计数据库并使用自动增量 ID 访问其数据的正确方法?

    C#、Linq2SQL - 获取具有关系数据的 ViewModel 对象的技巧?

    .net - .NET 中 DSL(工具)的经验

    c# - SQLite.net SQLiteFunction 在 Linq to SQL 中不起作用

    asp.net - 在 ASP.NET 3.5 中生成媒体 RSS (MRSS) 提要

    asp.net-mvc - IIS 6上的ASP.NET MVC-通配符映射-传入请求与任何路由都不匹配