实体框架 nvarchar 外键区分大小写

2023-11-25

我有相当简单的表结构,如下所示,问题对我来说听起来很奇怪。虽然我选择解决这个问题,但想听取专家的意见。

我有两张桌子

Users
UserName nvarchar(250) Primary Key
FirstName nvarchar(50)
LastName  nvarchar(50)

Registrations
Id BigInt PrimaryKey
User nvarchar(250) - Foreign to Users Table
Date - DateTime

Data I have is as follows.
Users
UserName FirstName LastName
a        Small     A 
b        Small     B

Registrations
Id       User      Date
1        A         1/1/12
2        B         1/1/12

请注意这里的用户大小写是大写,它在 SQL 中有效,它接受。

现在是有趣的部分。我生成了 EDMX、.Net 4.0,现在执行此代码。

 using (EFTestEntities context = new EFTestEntities())
            {
                var item = context.Registrations.Where(id => id.Id == 1).FirstOrDefault();
                Response.Write(item.User1.LastName);
            }

当我将注册表中的 UserName 列的值更改为时,它只是因空指针异常 User1 抛出 Null 而中断a代替A有用。

This Link谈论有些相似

This Link另一个类似的问题

请分享您的答案为什么会出现这种行为,我的数据库的排序规则不区分大小写。你遇到过类似的情况吗?


这里的问题是您的数据库不区分大小写,但 CLR (.NET) 不区分大小写,与数据库相反,它无法全局切换到不区分大小写模式 - 您必须在每次比较时执行此操作。

你打电话时item.User1.LastNameEF 将触发延迟加载 - 在数据库中执行附加查询来加载相关用户,但是当用户具体化时,EF 将开始修复和验证其关系模型,问题就来了 - 它会根据此设置比较区分大小写的字符串a不等于A正因为如此,你的负载User实体不是你的关系Registration实体。结果 EF 将无法修复User1财产,它将保持为空。访问LastName在这种情况下会抛出NullReferenceException.

解决办法只有两个:

  • 修复您的数据库并确保这种大小写差异不会再次出现在您的数据中
  • 如果您正处于项目的开始阶段或者您对数据库有完全的控制权,请重新设计它。NVarChar主键和外键是糟糕的数据库设计。

如果这些选择都不适合您,则应避免将 EF 与此类数据库一起使用。

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

实体框架 nvarchar 外键区分大小写 的相关文章

随机推荐

  • 不同库中的相同符号和链接顺序

    我有 2 个库 test 1 and test 2 两个库都包含一个全局的外部 C void f 函数 具有不同的实现 只是cout用于测试 我做了以下测试 Test 1动态链接 如果我添加libtest 1 so进而libtest 2 s
  • 无法在 case 语句 bash 中设置变量

    我试图根据一堆输入条件设置一个变量 这是代码的一个小示例 bin bash INSTANCE SIZE case 1 in micro INSTANCE SIZE t1 micro small INSTANCE SIZE m1 small
  • 自动释放与释放

    当我需要一个数组临时使用时 这些有什么区别 1 NSMutableArray stuff NSMutableArray alloc init use the array stuff release 2 NSMutableArray stuf
  • 在 WooCommerce 购物车中获取购物车项目的产品 ID

    cart item woocommerce gt cart gt get cart 我有上面的代码 如果我在 cart item 上运行 print r 我会得到一个多维数组 Array a6292668b36ef412fa3c4102d1
  • Web应用中长时间运行查询问题的解决方案(异步请求)

    这是问题所在 企业 Web 应用程序的用户正在执行导致长 非常长 数据库查询 或其他长处理密集型任务 的任务 问题 请求超时 一段时间后用户可能会遇到请求超时 会话超时 如果未使用会话保持方法 则可能会发生会话超时 Request thre
  • Jest + Material-UI:正确模拟 useMediaQuery

    我正在使用 Material UIuseMediaQuery 我的组件之一中的函数来确定size用于 a 的道具
  • Angular 2 路由参数重新初始化组件 onInit

    我遇到一个问题 当我使用新参数路由到我的组件时 它正在重新初始化 这是我的路线 const appRoutes Routes path component MyNewComponentComponent path tiles compone
  • 关于多个“catch”的问题

    谁能告诉我为什么这个类的输出是 xa 为什么其他异常 RuntimeException和Exception 不会被捕获 public class Tree public static void main String args try th
  • WPF TabItem 内容对齐始终居中

    我试图将一些内容放入 TabItem 中 但无法添加填充 TabItem 空间的容器 我添加的任何内容都会居中显示 我正在使用 WPF Toolkit 中的主题 WhistlerBlue xaml 所以我认为这可能就是导致我出现这个问题的原
  • 为什么从 PHP 5.4 开始永久启用“echo”短标签?

    甚至官方文档曾经告诉我们PHP 短标签 是 坏 然而 从 PHP 5 4 开始 echo种类永久启用 无论short open tag setting 发生了什么变化 即使他们之前仅仅因为是否存在不可预测的性质而被劝阻short open
  • 如何在python(windows平台)中安装xgboost包?

    http xgboost readthedocs org en latest python python intro html 在xgboost的主页 上面的链接 上 写着 要安装 XGBoost 请执行以下步骤 你需要跑make在项目的根
  • 使用 FindMatchingFiles 工作流活动的 MatchPattern 属性

    我正在使用 TFS 2010 Team Build 自定义构建过程模板的默认工作流程 有一个活动叫FindMatchingFiles允许使用中定义的模式搜索特定文件MatchPattern财产 如果我只指定一个文件扩展名 它就会起作用 例子
  • OpenGraph 还是 Schema.org? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 只是想知道你们是否喜欢遵循以下标记的 OpenGraph 协议 或者 Schema org 协议 div span Kenmore White 17 Mi span div
  • 无法在 Ubuntu 13.04 上使用 RVM 安装 Ruby on Rails

    我正在尝试在我的 Ubuntu 机器上安装 RVM 我已经使用curl来获取RVM 但是一些RVM命令 安装 要求 抛出此apt get错误 There has been error while updating apt get pleas
  • Git-2-SVN 迁移?

    是的 我知道 为什么要从 Git 迁移到 SVN 好吧 我碰巧遇到这样的情况 我需要将一个巨大的 Git 存储库迁移到 Subversion 这是我根据埃德温的评论尝试的一个工作流程 首先创建一个本地SVN仓库 svnadmin creat
  • 通过推送通知启动应用程序时进行调试

    我目前正在开发一个接收推送通知的应用程序 我通过 PHP 页面使这一切 100 正常工作 我的应用程序可以接收多种不同类型的推送通知 PHP 处理这个问题并向我的应用程序发送不同的信息包 这些信息包都被很好地接收 但是 当用户 查看 通知并
  • 在类的构造函数中返回一个值

    到目前为止我有一个PHP带有构造函数的类 public function construct identifier NULL Return me if identifier NULL this gt emailAddress identif
  • 在 C++ 中寻找基于 Windows RAM 的共享内存解决方案

    我面临着一种情况 我需要将多达数百兆字节的内存从一个进程传递到另一个进程 现在我正在通过文件来完成它 但速度太慢了 我想为了更快 这些文件应该直接写入 RAM 并且可以从另一个进程访问 不需要花哨的同步 一个进程将创建共享内存对象并用数据填
  • 内容出现在固定标题后面

    我修复了网站的标题部分 但页面的第一个 div 出现在标题后面 而不是从标题的末尾开始 当您申请时position fixed or position absolute该元素将从文档流中删除 因此后面的元素将其视为不存在 这就是为什么你的d
  • 实体框架 nvarchar 外键区分大小写

    我有相当简单的表结构 如下所示 问题对我来说听起来很奇怪 虽然我选择解决这个问题 但想听取专家的意见 我有两张桌子 Users UserName nvarchar 250 Primary Key FirstName nvarchar 50