如何传递通用方法的 lambda 表达式参数以检查 MVC EF 4.0 中的重复项

2024-01-12

我的应用程序中有超过 10 个设置屏幕。在每个数据中,我都必须检查重复数据。 例如,这是一个示例代码。

         private void CheckDuplication(AIRLINE airline)
        {
            var AIRLINE = context.AIRLINEs.Where(f => f.ABBREVATION == airline.ABBREVATION).FirstOrDefault();
            if (AIRLINE == null)
            {
                context.AIRLINEs.Add(airline);
            }
            else
            {
            ModelState.AddModelError("ABBREVATION", "Abbreviation already exists.");
            }
        }

整个项目中的每个设置都使用几乎相同的代码。 我想让这个方法变得通用,这样我就可以在任何需要检查重复项的地方调用它。 为此,我必须将参数传递给将设置“Lambda 表达式”的通用函数。 我创建了一个静态类,可以从应用程序中的任何位置访问它。 问题是如何将参数传递给此类(包含通用方法),该类将为不同的表和列通用设置 lambda 表达式并显示通用错误消息。 提前致谢。


实体框架已经提供了一种机制来检查数据库中是否存在实体,方法是AddOrUpdate method http://msdn.microsoft.com/en-us/library/dn217945%28v=vs.113%29.aspx。您可以在这样的方法中使用它:

using System.Data.Entity.Migrations;
...

public static string AddWhenNew<T>(DbContext context,
    Expression<Func<T, object>> identifierExpression, T item) where T : class
{
    var error = string.Empty;
    context.Set<T>().AddOrUpdate(identifierExpression, item);
    if (context.Entry(item).State != System.Data.Entity.EntityState.Added)
    {
        error = string.Format("{0} '{1}' already exists",
                              item.GetType().Name,
                              identifierExpression.Compile()(item));
    }
    return error;
}

在一些静态实用程序类中。

Usage:

var error = Util.AddWhenNew(context, a => a.ABBREVATION, airline);
if (!string.IsNullOrEmpty(error))
{

etc.

我特意检查State != EntityState.Added因为实体的状态可以是Attached or Modified这里(当它有相同的时候修改ABBREVATION但另一个属性不同)。但实际上,当实体不存在时Added,其状态被错误地报告为Detached因为一个bug https://entityframework.codeplex.com/workitem/2128 in AddOrUpdate.

所以你必须确保只打电话SaveChanges添加对象后,然后处置上下文,否则您可能会无意中保存其他修改。

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

如何传递通用方法的 lambda 表达式参数以检查 MVC EF 4.0 中的重复项 的相关文章

  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 使用 EF6 连接到 SQL Server

    在 EF5 之前 为了连接到 SQL Server 2012 我所需要做的就是指定一个如下所示的连接字符串 Data Source SqlExpress Initial Catalog MyDatabase Integrated secur
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 从 Excel 数据模型/Power Query 查询单个数据点(获取和转换数据)

    我正在使用最新版本的 Excel 2016 通过 O365 E3 许可证 并使用 Power Query Get Transform Data 我可以成功创建查询并将其加载到页面 我还成功创建了 Power Pivot 报告 我想从通过 P
  • COUNTIF 相当于 dplyr 总结

    我有一个数据框 列出了参加活动的学生总数 Stu 和每组学生人数 ID Sub ID Stu Sub int int int 1 101 80 NA 2 102 130 NA 3 103 10 NA 4 104 210 20 5 105 1
  • ajax 内容加载后点击不起作用

    如何使 live click function 在 ajax 调用后工作并使用 html data 返回内容 经过 4 个小时的搜索 我想我最好问一下 因为我一无所获 这部分正在工作 ajax type POST url loadAlbum
  • 在 IntelliJ IDEA 中按名称查找包

    我知道 Java 的名字package我想在项目中找到它 如何在 IntelliJ IDEA 中快速完成此操作 有键盘快捷键吗 Open Project View工具窗口 切换到Packages查看模式 单击齿轮图标 启用扁平包装选项 禁用
  • Django 1.6 网址不起作用

    我是 Django 新手 试图弄清楚 Django 中的 url 是如何工作的 我的应用程序urls py from django conf urls import url patterns import views urlpatterns
  • 将 MaterializeCSS 与 aurelia 结合使用

    我想问是否有一步一步的方法来使用或配置 Aurelia 的materializecss 我目前可以运行我的 Aurelia 应用程序 直到教程中我的 index html 看起来像这样
  • 如何将可选列表与上下文操作栏一起使用?

    我在这里阅读新的 Android 设计标准 http developer android com design patterns selection html http developer android com design patter
  • 如果批量使用GTR/LSS运算符

    我有一个越来越大的批处理文件 它使用GTR LSS运营商 问题是if语句只允许我输入某些值 在以下示例中 输入值 2 3 或 4 将返回 值太高 char intb set char points 30 set a limit char p
  • wsdl2java - 警告:无法初始化默认密钥管理器

    在生成 java WSDL 客户端时 我收到这些错误 你能帮我理解这些吗 C Users Administrator workspace apache cxf 3 0 2 bin gt wsdl2javahttps example com
  • 使用 TF-IDF 分数进行文本分类的 KNN

    我有一个 CSV 文件 corpus csv 其中包含语料库中以下格式的分级摘要 文本 Institute Score Abstract UoM 3 0 Hello this is abstract one UoM 3 2 Hello th
  • Android studio 防止粘贴时代码重新格式化[重复]

    这个问题在这里已经有答案了 我已经开始使用 Android Studio 取代 Eclipse 但我无法习惯的一件事是 Studio 如何自动 在某些情况下 重新格式化当前文件中的部分甚至全部代码 其中一种情况是将文本粘贴到我的文件中 当我
  • 正则表达式:+$ VS *$ VS 无

    在正则表达式中 有什么区别 a zA Z and a zA Z 我也可以根本不包括它吗 a zA Z or a zA Z 我在网上查了一下 上面写着 匹配前面的字符一次或多次并且 匹配前面的字符零次或一次 但我不知道这在这种情况下意味着什么
  • 删除按钮处于活动状态(单击)时的阴影

    我有这个 CSS 用于按钮动画和其他 btnliner background url images btnbg png no repeat center 105px Fallback display block text align cen
  • 如何用C#模拟浏览器HTTP POST请求并捕获结果

    假设我们有一个带有搜索输入表单的网页 它通过 HTTP GET 将数据提交到服务器 这意味着服务器通过查询字符串接收搜索数据 用户可以看到 URL 也可以自己初始化此请求 通过 URL 查询字符串 我们都知道 这是问题所在 如果这个网页通过
  • Javascript:显示带有复选框值的图像

    我目前正在使用单选按钮和复选框来在 javascript 的帮助下显示图像 具体来说 我在处理复选框和显示图像时遇到问题 使用单选按钮时 只会显示该类别的一张图像 但对于复选框 需要显示多个图像 例如 用户可以检查夹克和手套的字段 并且将显
  • 如何在node.js中使用CasperJS?

    我想在node js 中使用CasperJS 我参考了以下 URL 在 node js 中使用 CasperJS https github com sgentle phantomjs node https github com sgentl
  • Angular Js:类属性指令中的 onchange 不起作用

    控制指令 js function validVehicleyear scope http return restrict C scope ngModel link function scope element attrs ngModel e
  • 在 Docker 中启动并填充 Postgres 容器

    我有一个包含 Postgres 数据库的 Docker 容器 这是用官方的Postgres 图像 https registry hub docker com postgres 其中有一个 CMD 条目在主线程上启动服务器 我想通过运行来填充
  • xcode 8 错误被服务委托拒绝 (SBMainWorkspace)

    尝试在模拟器上运行构建 我收到此错误 打开 com companyname appname 的请求失败 请求被服务委托 SBMainWorkspace 拒绝 原因 安全 权利 启动需要 com apple frontboard debuga
  • 如何传递通用方法的 lambda 表达式参数以检查 MVC EF 4.0 中的重复项

    我的应用程序中有超过 10 个设置屏幕 在每个数据中 我都必须检查重复数据 例如 这是一个示例代码 private void CheckDuplication AIRLINE airline var AIRLINE context AIRL