实体框架4:如何查找主键?

2023-12-30

我正在尝试使用 EF4 创建一个通用方法来查找对象的主键。

example

public string GetPrimaryKey<T>()
{
    ...
}

为了提供更多信息,我正在使用 Tekpub StarterKit,下面是我尝试启动和运行的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Objects;
using System.Data.Objects.ELinq;
using System.Data.Linq;
using Web.Infrastructure.Storage.EF4;

namespace Web.Infrastructure.Storage {
public class EFSession:ISession {
    PuzzleEntities _db;//This is an ObjectContext
    public EFSession() {
        _db = new PuzzleEntities();
    }

    public void CommitChanges() {
        _db.SaveChanges();
    }
    /// <summary>
    /// Gets the table provided by the type T and returns for querying
    /// </summary>
    private ObjectSet<T> GetObjectSet<T>() where T:class {
        return _db.CreateObjectSet<T>();
    }

    private T GetByPrimaryKey<T>() where T: class
    {
        .....
    }

    public void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T: class{

        foreach (T item in All<T>().Where(expression))
        {
            GetObjectSet<T>().DeleteObject(item);
        }
    }

    public void Delete<T>(T item) where T : class {
        GetObjectSet<T>().DeleteObject(item);
    }

    public void DeleteAll<T>() where T : class {
        foreach(T item in All<T>())
        {
            GetObjectSet<T>().DeleteObject(item);
        }
    }

    public void Dispose() {
        _db.Dispose();
    }

    public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T:class {
        return GetObjectSet<T>().SingleOrDefault(expression);
    }

    public IQueryable<T> All<T>() where T : class {
        return GetObjectSet<T>().AsQueryable();
    }

    public void Add<T>(T item) where T : class {
        GetObjectSet<T>().AddObject(item);
    }
    public void Add<T>(IEnumerable<T> items) where T : class {
        foreach (T item in items)
        {
            GetObjectSet<T>().AddObject(item);
        }
    }
    public void Update<T>(T item) where T : class {
        //nothing needed here
    }
}
}

所以我终于找到了如何让它发挥作用。我希望我没有丢失昨晚阅读的博客的链接,因为我没有编写代码。

public T GetByPrimaryKey<T>(int id) where T : class
{
    return (T)_db.GetObjectByKey(new EntityKey(_db.DefaultContainerName + "." + this.GetEntityName<T>(), GetPrimaryKeyInfo<T>().Name, id));
}

string GetEntityName<T>()
{
    string name = typeof(T).Name;
    if (name.ToLower() == "person")
        return "People";
    else if (name.Substring(name.Length - 1, 1).ToLower() == "y")
        return name.Remove(name.Length - 1, 1) + "ies";
    else if (name.Substring(name.Length - 1, 1).ToLower() == "s")
        return name + "es";
    else
        return name + "s";
}

private PropertyInfo GetPrimaryKeyInfo<T>()
{
    PropertyInfo[] properties = typeof(T).GetProperties();
    foreach (PropertyInfo pI in properties)
    {
        System.Object[] attributes = pI.GetCustomAttributes(true);
        foreach (object attribute in attributes)
        {
            if (attribute is EdmScalarPropertyAttribute)
            {
                if ((attribute as EdmScalarPropertyAttribute).EntityKeyProperty == true)
                    return pI;
            }
            else if (attribute is ColumnAttribute)
            {

                if ((attribute as ColumnAttribute).IsPrimaryKey == true)
                    return pI;
            }
        }
    }
    return null;
}

我希望这对其他人有帮助。我只能说,如何做到这一点应该更清楚一些。

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

实体框架4:如何查找主键? 的相关文章

  • 管理多个解决方案中存在的 C# 项目的 Nuget 包

    我现在正处于这样的阶段重构疯狂一个有很多的大项目遗留和不稳定的模块 我决定拆分解决方案目前 所有项目 大约有 20 个 而且由于下个月肯定会出现单元测试项目 还会有更多 链接在一起 使其更加独立和细化 通过这种方法 有一些模块 例如需要在多
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • WPF 中可选择的 TextBlock 或带有格式化文本的 TextBox

    我遇到一种情况 我需要显示格式化文本 正常 粗体 突出显示 并且还应该是可选择的 以便用户可以复制文本 我使用了文本块 我可以使用内联内容流元素应用多种格式 但不幸的是它的文本不可选择 虽然文本框允许选择文本并复制到剪贴板 但它不允许我设置
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • 在 C# 中给定周数和年份,计算一周的开始和结束日期(基于 ISO 规范)

    我需要生成一份报告 显示一年中的 52 周 或某些年份的 53 周 及其开始日期和结束日期 有一个 ISO 规范可以做到这一点 但看起来非常复杂 我希望有人知道在 C 或 Visual Basic 中执行此操作的方法 实际上适用于 Visu
  • 将控制台输入和输出重定向到文本框

    您好 提前致谢 我正在尝试 非常努力 将控制台输入和输出重定向到文本框 到目前为止 输出工作正常 但问题在于输入 例如 我无法执行一个简单的程序来执行以下操作 Console WriteLine 请输入您的姓名 字符串名称 Console
  • 在浏览器中测试wcf服务

    我无法在浏览器中调用基本的 wcf web 方法 即使使用
  • 等效

    这是否保证始终为真 std numeric limits
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 使用 c++20 范围删除最后一个元素的最佳方法是什么

    有没有比反转两次更好的方法来使用 c 20 范围删除容器中的最后一个元素 include
  • 如何使用 MVVM 更改数据网格或列表视图中的内容

    我有一个 MainWindowViewModel DataContext 它公开不同的 ObservableCollections 带有 INotifyProperty 的 poco 对象的视图模型 从组合框中选择一个值后 我想单击一个加载
  • 如何在 OpenCV 中删除 mouseCallback

    在使用 C 的 OpenCV 中 有没有办法删除 mouseHandler int event int x int y int flags void param 通过函数添加到窗口 image window cv setMouseCallb
  • 从资源文件获取 DisplayName [重复]

    这个问题在这里已经有答案了 我在 App GlobalResources 文件夹中有特定于文化的资源文件 现在我需要从此资源文件中读取 DisplayName 属性的值 我在用 Display Name MerchantName Resou
  • 为什么 istream/ostream 慢

    于 50 40http channel9 msdn com Events GoingNative 2013 Writing Quick Code in Cpp Quickly http channel9 msdn com Events Go
  • 为 winforms ComboBox 中的单个项目着色?

    我遇到了一个困境 我有一个表单 其中包含许多组合框 其中包含在某些情况下可能无效 过时的信息 选项 项目 我不能简单地从项目中删除过时的信息 但我确实想在选项无效时为用户提供视觉线索 我正在考虑对项目进行着色 可能是红色 来指示它们是否无效
  • C++ 从文件中读取字符串

    我试图将字符串直接存储到一个文件中 以便稍后在 C 中读取 基本上 对于整个范围 我试图将带有字符串变量的对象数组存储在文件中 并且这些字符串变量将通过类似 object 的内容读取 0 字符串 然而 每次我尝试读取字符串变量时 系统都会给
  • 绑定未正确更新用户控件属性 MVVM

    编辑 删除旧代码 我将它放在 MainWindow xaml 上
  • wpf中的图像问题(图像不显示)

    我不明白为什么我无法在 WPF 中显示图像 也许我不小心修改了我的资源文件夹 这就是我没有显示的原因 所以我创建了一个新的 wpf 应用程序 我有这个 当我运行该程序时 我的图片显示为 为什么当我尝试在程序中执行相同的操作时 图像没有显示
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • “hello world”字符串文字可以分配给 char * 类型吗?

    char foo fpp compile in vs 2010 with no problem 我认为字符串文字是 const char 类型 并且 const 类型不能赋值给非 const 类型 所以我预计上面的代码会失败或者我错过了什么
  • 与 Teamcity 和 Clearcase 持续集成

    有没有人成功地将 Clearcase 与 Teamcity 宣传 Clearcase 支持 集成 以在一个相当规模的项目上实现高效的持续集成构建环境 是的 我们有 但是有一个TeamCity 的自定义 ClearCase 插件 为了 使用动
  • Android 从 mySql 获取数据

    我必须从服务器上的 MySQL 数据库获取一些数据 我有以下代码 但是当我运行它时应用程序崩溃了 我也得到了权限被拒绝 缺少 INTERNET 权限 在我的 Logcat 中 即使我在 Android 清单中指定了互联网权限 知道这里可能出
  • Grails 编程式事务处理

    我的 Grails 应用程序有一个服务方法 可以更新来自 last fm 的 Web 服务的艺术家列表 Transactional propagation Propagation NOT SUPPORTED void updateLastF
  • 将 MvxBindableTableViewCell 的 Accessory 绑定到 boolean

    我被困在如何将 MvxBindableTableViewCell 的附件绑定到布尔值上 我将表的 ItemsSource 绑定到 ViewModel 中的列表 显示了一个很好的可单击项目列表 不过 我希望单元格的附件 UITableView
  • 定义为宏的标准库函数的参数类型错误

    这是示例代码 include
  • 如何在 WSL 2 下运行 docker-compose

    根据Docker 文档 https docs docker com docker for windows wsl tech preview 在 WSL v2 下使用 Docker 应该相当简单 安装 WSL 2 确保满足所有先决条件 安装
  • 如何使用 git 将多个项目分叉到一个存储库中?

    我有 3 个项目想要 fork 它们都是相互关联的 改变一个可能需要改变另一个 因为它们都是相关的 所以我想为分支创建 1 个存储库 同时保持从每个原始版本中提取更新的能力 我将如何设置我的 git 存储库 这些都是初步的想法 所以如果这是
  • Javascript:使用 concat 和 reduce 进行练习

    我正在做一个练习 从数组数组开始 我必须将其减少 使用reduce 和 concat 到单个数组中 该数组包含给定的每个数组的所有元素 所以我从这个开始 var array 1 2 3 4 5 6 7 8 9 我用这个解决了这个练习 var
  • 创建自定义连续分布时使用 scipy rv_continuous 的方法

    我正在尝试计算E f x 对于我根据数据生成 估计的一些pdf 它在文档中说 子类化 可以通过子类化 rv continuous 类来定义新的随机变量 并至少重新定义 pdf 或 cdf 方法 标准化为 位置 0 和比例 1 将被给予干净的
  • 如何在 Spring Boot 独立应用程序中激活 JMX 监控

    我浏览了几乎所有文档 但无法掌握这个神秘的东西 所以我的问题是 我可以使用我的独立 Spring Boot 应用程序吗通过 http jmx url 监控我的应用程序的运行状况和其他指标 我需要为此配置其他东西吗 我在启动应用程序中添加了以
  • iPhone 相机光圈/快门卡在关闭位置

    正如标题所述 我正在开发的应用程序存在一个问题 只有在进入后台后重新启动应用程序时才会出现问题 相机光圈或快门卡在关闭位置 有趣的是 你仍然可以拍照 但看不到预览 拍摄照片后 它会正确显示在视图中 如果应用程序完全关闭 则启动应用程序时不会
  • 如何像传统方式一样使用 AngularJs 上传文件

    我已经尝试这个好几天了 假设我有如下形式
  • Android Q:如何从特定目录获取图像列表

    Android 问 我需要从我保存图像的特定目录中获取图像列表 并将这些图像显示在我的应用程序上 保存图片代码 final String relativeLocation Environment DIRECTORY PICTURES Fil
  • DB2 的数据模型工具

    我在 DB2 中创建了一个数据库和具有关系的表 我想根据我在 DB2 中的数据库设计创建一个 ER 图 MS SQL 有一种从 DB 模式创建 ER 图的工具 但 DB2 似乎没有 至少据我所知 有人知道 DB2 本身有任何开源工具 设施吗
  • 具有模板函数的模板类

    谁能告诉这段代码有什么问题吗 template
  • 如何通过viewModels获取viewModel? (片段-ktx)

    我正在为 Activity 及其所有片段使用 Single viewModel 所以要初始化viewmodel如果必须编写此设置代码onActivityCreated所有片段的 override fun onActivityCreated
  • Node.js 和 Multer - 在回调函数 (req,res) 中处理上传文件的目的地

    我是 Node js 新手 最近遇到了一个简单的问题 我在用着multer上传图像的模块 在我的网络应用程序中 所有用户都有一个唯一的 ID 我希望将上传的图像存储在根据他们的 ID 命名的目录中 Example public upload
  • 隐藏导航栏而不丢失 SwiftUI 中的向后滑动手势

    在 SwiftUI 中 每当导航栏隐藏时 滑动返回手势也会被禁用 有没有什么方法可以隐藏导航栏 同时保留 SwiftUI 中的向后滑动手势 我已经有一个自定义的 后退 按钮 但仍然需要手势 我已经看到了 UIKit 的一些解决方案 但仍然不
  • 实体框架4:如何查找主键?

    我正在尝试使用 EF4 创建一个通用方法来查找对象的主键 example public string GetPrimaryKey