实体框架 4 中是否允许可为 null 的外键?

2024-04-04

我在更新实体框架实体中的外键时遇到问题。我正在使用自跟踪实体,并且有一个具有某些关系的实体,其中外键也作为属性存在(EF4 的新功能之一)。键(整数)被标记为可空且并发模式固定。

具体来说,我有一个与确认用户具有多对 0..1 关系的 Alarm 实体。 (一个用户可以确认多个报警,但一个报警只能被零个或一个用户确认)。

实体定义(简化):

Alarm properties
Id      Int32   non-nullable  identity entity key
UserId  Int32   nullable concurrency mode fixed
Alarm navigation properties
User    0..1 multiplicity

User properties
Id      Int32   non-nullable  identity entity key
Name    String  non-nullable

在我的自我跟踪实体中,确认用户 ID 按照预期自动生成为 Nullable,但是如果我将用户分配给已经持续存在的警报并运行 ApplyChanges,自我跟踪上下文扩展会尝试在中设置原始值 (null) EF 上下文(在上下文扩展中的 SetValue 中),但会默默地跳过它,因为 EdmType 的 ClrEquivalentType 是不可为 null 的 Int32。

自动生成的扩展代码:

    private static void SetValue(this OriginalValueRecord record, EdmProperty edmProperty, object value)
    {
        if (value == null)
        {
            Type entityClrType = ((PrimitiveType)edmProperty.TypeUsage.EdmType).ClrEquivalentType;
            if (entityClrType.IsValueType &&
                !(entityClrType.IsGenericType && typeof(Nullable<>) == entityClrType.GetGenericTypeDefinition()))
            {
                // Skip setting null original values on non-nullable CLR types because the ObjectStateEntry won't allow this
                return;
            }
        }

        int ordinal = record.GetOrdinal(edmProperty.Name);
        record.SetValue(ordinal, value);
    }

当 EF 稍后尝试更新我的警报时,我收到 OptimisticConcurrencyException,因为它在 UPDATE 语句中构造了一个 WHERE 子句,其中使用 0(零)作为原始用户外键值,而不是正确的“is null”。 (WHERE 子句是 EF 乐观并发机制的一部分,其中标记为“固定”并发模式的属性的原始值将再次与数据库中的属性进行检查)。

EF 的自跟踪实体是否不完全支持可为 null 的外键/原始类型? 如果不是,我是否被迫使用虚拟实体而不是 null 或者还有其他解决方法?

Update我尝试在不使用 STE 的情况下重现该问题,但普通 EF 似乎可以很好地处理可空外键的乐观并发,因此这是一个 STE 问题,而不是 EF 问题。 自我跟踪实体存在许多问题,因此这里出现故障也就不足为奇了。如果我找到可以在 STE T4 脚本中实现的解决方法,我会将其发布在这里。


Bill Huth 在以下位置发布了一个工作补丁:MSDN http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/0d0582fd-9241-49e3-82a0-e6c2530bf0ab/#31947301-cc32-40bc-8aa1-28c0da07d91d.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架 4 中是否允许可为 null 的外键? 的相关文章

  • 使用 UnitofWork 模式的 Rhino 模拟实体框架不起作用

    这是我第一次尝试这样的事情 所以希望这很简单 我创建了一个使用实体框架访问数据库的 WCF 服务 我已经实施了一个工作单元接口 以便我的服务可以使用 EF 同时仍然可测试 这是我的服务 public class ProjectService
  • AspNetUserLogins 表身份

    AspNetUserLogins 的用途是什么 是存储用户的登录信息吗 然后我如何用该数据更新该表 AspNetUserLogins 的用途是什么 在Asp net Identity中 Identity系统使用AspNetUserLogin
  • 当绑定值为 null 时出现 WPF 日期选择器验证错误

    我有一个 WPF 应用程序 其中使用绑定到实体框架 带有 SQL Server 实体的日期字段的日期选择器 我将其绑定如下
  • MVC3 和实体框架

    我的问题很简单 将 edmxMVC3 项目的 Web 应用程序的模型文件夹中的文件吗 我的答案非常简单 不要用数据访问逻辑和数据建模搞乱表示层 整个 MVC 应用程序 Visual Studio 解决方案中从下到上至少有 4 个项目 1 P
  • 使用 IQueryable 进行单元测试代码

    我被要求为某些功能编写一些单元测试 但坦率地说 我不太确定这样做的必要性或有用性对于这个特殊的一段代码 我绝不试图质疑单元测试的必要性或有用性 所讨论的代码非常简单并且被大量使用 基本上它是 Skip 和 Take 扩展方法的包装 在我看来
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 如何将字符串解析为 UNIQUEIDENTIFIER?

    我正在编写一个实体框架 LINQ 查询 其中我想将字符串解析为 UNIQUEIDENTIFIER 又名 GUID 作为WHERE clause public IEnumerable
  • 如果我以后要应用ado实体框架,推荐的数据访问层设计模式是什么?

    我正在创建一个网站并使用 Linq to SQl 作为数据访问层 并且我愿意使该网站可以在 linq to sql 和 ado 实体框架上工作 而无需更改其他层中的许多内容 业务逻辑层或 UI层 实现这一目标的推荐模式是什么 你能简单解释一
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • MVC5 实体框架的问题

    我在我的 Web 应用程序中使用 Visual Studio 2013 中的 ASP NET MVC5 Entity Framework 6 我正在尝试我的模型工作 但由于某种原因而出现错误 我已经尝试过 Fluent API 和它自己的模
  • 如何将存储过程结果映射到自定义类?

    我在用entity framework 5我已经添加了两个存储过程到我的 edmx model 第一个存储过程返回一个字符串 如果我在 Visual Studio 中打开模型浏览器 我可以更改Returns a Collection Of节
  • Entity Framework Core 中的两个外键

    我在使用 Entity Framework Core 创建数据库时使用代码优先方法 我想创建两个指向同一个表的外键 我的示例显示用户表将保存用户 ID 消息表将保存接收者 ID 和发送者 ID 这意味着两个值必须指向同一个表 用户代码 pu
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • OWIN 可以替代 ASP.NET MVC 应用程序中的 DI 吗?

    大约一年前 在 Visual Studio 中创建时自动生成的 MVC 项目不包含任何有关 OWIN 的内容 作为再次申请并试图了解这些变化的人 我想知道 OWIN 是否可以替代我的 DI 据我了解 Startup Auth cs 中的以下
  • Oracle:动态设置表中所有 NOT NULL 列以允许 NULL

    我有一个包含 75 多个列的表 几乎所有列都有 NOT NULL 约束 如果执行巨大的更改表修改语句 其中的每一列 我会收到一条错误消息 内容大致为 您不能将此字段设置为 NULL 因为它已经是 NULL 我必须对几个表执行此操作 因此更希
  • 实体框架:从模型生成数据库从模型存储中删除存储过程

    我正在使用带有 EF 4 模型的存储过程 为了实现这一目标 我将执行以下步骤 我通过从数据库更新并选择它来将存储过程添加到我的模型存储中 添加了函数导入以指向存储过程 存储过程返回连接多个表等的查询结果 因此在 返回集合 我指定的区域复合型
  • 简单的 Linq 查询对同一个表有重复的连接?

    来自 Julia Lerman 的新实体框架书中的示例 我有一个包含两个表的数据库 联系人和地址 Contact 表有一个 ContactID int 以及名字 姓氏等 Address 表有一个 ContactID 以及城市 州 邮政编码等
  • 在同一项目中同时使用 AddDbContextFactory() 和 AddDbContext() 扩展方法

    我正在尝试使用新的DbContextFactory中讨论的模式EF Core 文档的 DbContext 配置部分 https learn microsoft com en us ef core dbcontext configuratio
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • phpmyadmin - Mysql 没有权限

    我在 Windows 7 上安装了 wamp 2 1 但是 当我打开 phpMyAdmin 时 出现错误 Mysql No Provileges 我卸载了wamp并重新安装了几次 但没有帮助 有谁知道如何解决这个问题 另外 当我尝试从 my
  • 使用 JavaScript 打开和关闭 CKEditor 4 内联编辑

    我需要能够使用按钮打开 关闭内联编辑 请参阅此处的内联编辑示例 http nightly v4 ckeditor com 3559 samples inlineall html http nightly v4 ckeditor com 35
  • 在 C 系列中,在循环中为什么“小于或等于”比“小于”符号更受青睐? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 为什么在 C 系列语言中 当我们对任何循环使用计数器时 最优选的比较是Greater Equal To lt 或者它的倒数 请看一下这三段代码
  • 使用 css 绘制图像内的曲线

    是否可能以及如何在图像顶部和底部内制作一条曲线 请参见图像 我怎样才能用CSS实现这一点 将您的图像设置为 div 上的背景图像并使用此技术 我在示例中使用了纯红色 这里我使用伪元素来创建顶部和底部的曲线 请注意 顶部和底部偏移量是每个伪元
  • Mockito:验证来自内部匿名类的方法调用

    我有一个正在测试的类 其中包含一个具有内部匿名类的方法 匿名类中的方法之一调用被测类中的方法 但 Mockito 似乎没有意识到这一点 public class ClassUnderTest Dependency dependency pu
  • C# 中的 SplitContainer 拆分器?

    i am using a split container For some reason the splitter looks like this 很难看到 就是两条黑线中间那条微弱的两条线 我该如何解决这个问题并在两条线之间添加填充 我使
  • Log4Net 可用于 adoappender 的数据库字段 - 似乎还有更多,即 method_name?

    我最近创建了简单的 log4net 数据库表 用于通过 adonet 附加程序进行日志记录 并且它有效 但后来我注意到另一个网站使用额外的字段 看 哇 我很想知道在哪里可以获得可用字段名称的列表 例如 Method name 真的让我思考
  • 使用相对导入路径时 Aurelia 捆绑失败

    我将 aurelia 与 typescript 一起使用 我想避免使用相对导入路径 例如 import DialogBox from resources elements dialog box 反而 import DialogBox fro
  • 具有unpivot自动抓取列列表(oracle 11g)

    这是一个后续问题将一行转置为多行 Oracle https stackoverflow com questions 2344403 transpose one row into many rows oracle 我希望能够反转任意查询结果
  • ubuntu 12.04 中 android-ndk-r9d-linux-x86 的 ndk-gdb 出现错误

    我在ubuntu 12 04中使用android ndk r9d linux x86的ndk gdb来调试android本机应用程序 hello jni 但它收到此错误 WARNING The shell running this scri
  • 无限滚动抓取网站

    我写了很多抓取工具 但我不太确定如何处理无限滚动条 如今 大多数网站 例如 Facebook Pinterest 都有无限滚动条 您可以使用 selenium 废弃 twitter 或 facebook 等无限滚动网站 步骤 1 使用 pi
  • 我可以将 xmodem 协议与 PySerial 一起使用吗?

    我通过 PySerial 与串行设备建立了工作连接 但我也想通过 xmodem 协议传输文件作为我的程序的一部分 哪一种是最平台中立的方式来做到这一点 最坏的情况 我可以close my serial SerialPython中的对象及其使
  • 如何在Python中从.pb文件恢复Tensorflow模型?

    我有一个 tensorflow pb 文件 我想将其加载到 python DNN 中 恢复图形并获取预测 我这样做是为了测试创建的 pb 文件是否可以做出与正常 Saver save 模型类似的预测 我的基本问题是 当我使用上述 pb 文件
  • Laravel Web 和 API 控制器结构。分开与干燥

    我想构建一个同时使用 Web 和 API 部分的 Laravel 应用程序 常见的 也是我的 问题是是否使用单独的控制器 有 2 个选项 独立控制器Laravel API 控制器结构 https stackoverflow com ques
  • CryptoStream 和经过身份验证的加密模式

    我有兴趣提供一个在 Net 中使用的托管 dll 它提供经过身份验证的加密服务 DLL 可以在 WPF 程序或 ASP 应用程序中使用 我有几个与 Microsoft 的加密和流模型相关的问题 经过身份验证的加密模式 CCM CWC EAX
  • 构建 Yeoman 应用程序会破坏 CSS 背景图像

    我正在尝试将现有项目迁移到 Yeoman Grunt Bower 更改里面的路径后Gruntfile js我注意到图像路径没有正确构建 background transparent url Users lucian Projects PRO
  • om 组件应该返回什么才能不渲染任何内容?

    是否可以编写一个不呈现任何内容的组件 例如 如果其光标数据为空 我不能做 defn count or nothing list cursor owner reify om IRender render if not empty list c
  • 使用 Orchard 创建列表

    我正在尝试按照本教程创建内容列表 http docs orchardproject net Documentation Creating lists http docs orchardproject net Documentation Cr
  • 如何安装第三方库

    我对 C 有点陌生 我决定尝试使用odeint做一些模拟 因为 python 太慢了 无法满足我的需求 I found 这个包 http headmyshoulder github io odeint v2 index html 我想玩 我
  • 实体框架 4 中是否允许可为 null 的外键?

    我在更新实体框架实体中的外键时遇到问题 我正在使用自跟踪实体 并且有一个具有某些关系的实体 其中外键也作为属性存在 EF4 的新功能之一 键 整数 被标记为可空且并发模式固定 具体来说 我有一个与确认用户具有多对 0 1 关系的 Alarm