实体框架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:如何查找主键? 的相关文章

  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • “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