EF6 实体的通用克隆

2023-12-25

我正在尝试获取与 EF6.0.2 一起使用的通用 CloneEntity 函数

public static T CopyEntity<T>(MyContext ctx, T entity, 
bool copyKeys = false) where T : EntityObject
{
T clone = ctx.CreateObject<T>();
PropertyInfo[] pis = entity.GetType().GetProperties();

foreach (PropertyInfo pi in pis)
{
    EdmScalarPropertyAttribute[] attrs = (EdmScalarPropertyAttribute[])
                  pi.GetCustomAttributes(typeof(EdmScalarPropertyAttribute), false);

    foreach (EdmScalarPropertyAttribute attr in attrs)
    {
        if (!copyKeys && attr.EntityKeyProperty)
            continue;

        pi.SetValue(clone, pi.GetValue(entity, null), null);
    }
}

return clone;
}

这段代码来自这里 http://www.codeproject.com/Tips/474296/Clone-an-Entity-in-Entity-Framework-4

[更新] 我不得不将声明更改为

public static T CloneEntity<T>(T entity, bool copyKeys = false) where T : class

这解决了编译错误:“T”必须是引用类型才能将其用作泛型类型或方法中的参数“T”

但是,当我使用此方法时,不会将任何属性复制到新对象。

我首先不使用代码。我使用的对象是从 edmx 文件生成的。

我使用它的对象类型是从 T4 生成的

public partial class job
{
    public short LineID { get; set; }
    public short CycleID { get; set; }
    // other fields 
}

我的 DBContext 就像

public partial class DataEntities : DbContext
{

    public DbSet<job> Jobs { get; set; }
}

[Update]

I tried

using (var db = CreateDb())
{

    var nJob = new job();
    db.jobs.Attach(nJob);
    db.Entry(nJob).CurrentValues.SetValues(job);

    return nJob;
}

但我得到一个错误

"The property 'JobID' is part of the object's key information and cannot be modified. "

上下文是一个部分类

还有

partial class DataEntities
{
    public DataEntities(string efConnectString)
        : base(efConnectString)
    {

    }
}

我想他们会给你一个开箱即用的。尝试类似的方法:

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

EF6 实体的通用克隆 的相关文章

  • 实体框架中的重复键异常?

    我试图捕获当我将具有给定用户名的现有用户插入数据库时 引发的异常 正如标题所说 我正在使用 EF 当我尝试将用户插入数据库时 引发的唯一异常是 UpdateException 如何提取此异常以识别其是否是重复异常或其他异常 catch Up
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • 首先EntityFramework数据库 - 类型映射 - 将binary(8)从SQL映射到C#中的int

    在 SQL 内部 我有一个主键为二进制 8 的表 当我使用该表添加到我的模型中时Update Model from Database我可以看到该列有 type Binary 在 C 中 我将该列设为byte 我可以将该列映射到 int 吗
  • 即使定义了其他主键,实体框架 6 也会创建 Id 列

    我将 DataObject 定义为 public class SensorType EntityData PKs public string CompanyId get set public string ServiceId get set
  • 实体框架 5 不清除导航属性

    我在 Entity Framework 5 中遇到了这个奇怪的问题 我在其中一个实体中有一个导航属性 我想将其设置为null 但由于某种原因 该属性只有在我第二次调用该属性时才会被清除 using var db new Entities v
  • 我们可以使用枚举作为类型安全的实体 ID 吗?

    我们正在 EF 6 1 代码优先设置中使用一个相当大的模型 并且我们使用整数作为实体 id 不幸的是 这并不像我们希望的那样类型安全 因为人们很容易混淆 id 例如比较不同类型的实体的 id myblog Id somePost Id 或类
  • 在使用实体框架的分层架构中,我应该从 BLL 返回 POCO 类吗? (需要架构指导)

    我可能读得太多了 并且遭受了一些信息超载的困扰 所以我希望得到一些明确的指导 根据我收集的信息 我可以使用 VS2010 的 T4 模板来生成不直接与 EF 绑定的 POCO 类 我会将这些放在他们自己的项目中 而我的 DAL 将有一个 O
  • 实体框架不将Where子句作为WHERE子句发送到SQL Server

    我有一个包含站点的简单数据库 每个站点都有一堆帖子 我正在尝试获取某个站点的所有 公共 帖子 我有一个名为 site 的变量 它已经是 EF 带来的实例 第一个显而易见的事情是 var posts from post in site Pos
  • 具有长期运行对象上下文的实体框架

    我对 WinForms 我敢说 WPF 中的 Linq to SQL 的主要烦恼之一是缺乏对长时间运行的数据上下文的支持 请参阅here http blogs msdn com dinesh kulkarni archive 2008 04
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • 使用 EF 6 和 MVC 5 中的 Code First 方法将新表添加到现有数据库

    我知道这应该很简单 但我无法在网上找到有关此主题的正确教程或解释 有很多关于使用代码优先方法向现有表添加新列的视频和帖子 但我找不到任何关于如何将整个新表添加到现有数据库的分步说明 这很奇怪 我很确定我会找到很多例子 也许我的搜索条件不好
  • “等待操作超时”...但仅来自 .NET 客户端?

    我有一个查询 当从我的应用程序执行时会抛出 SqlException 0x80131904 超时已过期 操作完成之前超时时间已过 或者服务器没有响应 在 Visual Studio 中单步执行代码时 我遇到了同样的错误 但是 当使用相同的凭
  • 如何使用 EF Code First 将一张表与多个父项关联

    我正在构建一个域模型 该模型需要多个表才能被多个可能的父表引用 像您可能有一个表来存储注释或文件 并且这些注释和 或文件可以与不同的父实体关联 并不是说同一个 文件 或 注释 可以与多个所有者相关联 而是 文件 表中的 10 行中 其中 3
  • EF6 找不到 LocalDBConnectionFactory

    我有 2 个项目 类库 作为 DAL 层 和 ASP NET MVC 项目 作为 UI 为了获取数据 我尝试使用 EF6 但它不起作用 所有异常文本 EntityFramework dll 中发生 System InvalidOperati
  • 对于相同的数据库对象,实体框架对象引用是否相同

    如果我从不同位置查询 逻辑上 在数据库中 相同的对象 实体框架是否返回相同的对象引用 例如 我查询了名为 Joe Black 的客户 并假设现在我知道数据库中只有一个 Joe Black Customer c select blabla w
  • 同时使用实体框架与 SQL Server 和 SQLite 数据库

    我有一个用于测试目的的 C Net 4 0 控制台应用程序 使用 VS 2012 我的目标是能够创建一个可在 MS SQL Server 数据库和 SQLite 数据库上使用的单个实体框架 edmx 文件 基本上 我想使用相同的实体模型类和
  • 实体类型 ApplicationUser 不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库

    我使用实体框架创建了一个 MVC 4 应用程序来读取数据并将数据写入我在 Azure 数据库上托管的数据库 Azure 数据库应该保存应用程序数据和应用程序的登录数据 但是 当我第一次创建应用程序时 我忘记删除到本地计算机的连接字符串 因此
  • 实体框架中空值的左连接

    我需要使用实体框架在 C 项目中执行 10 次左连接 我已经检查了至少 10 个不同的页面和 stackoverflow 帖子来了解如何执行此操作 他们都没有工作 我当前的加入如下所示 from tbl1 in context tblNam
  • 应用程序内的 SQLite 文件版本兼容性

    我有一个 C NET 应用程序 一种复杂的计算应用程序 其中用户输入数据 处理后的信息使用 JSON 序列化和 EF 保存到 SQLite 文件中 需要时可以将其加载到我们的应用程序中 应用程序在开发过程中经历了很多变化 类也被修改 因此
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e

随机推荐

  • 再次显示相同的 AlertDialog

    我正在测试 AlertDialog 的行为以集成到更大的组件中 我无法再次显示相同的对话框 这是测试代码 public class MainActivity extends AppCompatActivity private AlertDi
  • 返回 id 并分割逗号分隔值的 SQL 语句

    我有一个包含以下数据的表 NodeId ExternalIds 50 601 56 700 701 如何编写分割ExternalIds列并返回的SQL语句 NodeId ExternalIds 50 601 56 700 56 701 我发
  • Google 日历活动的正确日期格式

    我正在尝试为 Google 日历创建活动 但收到此错误 Invalid value for T found can only parse bare date string 2013 08 22T16 00 00 我还尝试将时区偏移添加到我的
  • 在 WordPress 的父帖子页面上显示子帖子

    我们当前的网站使用带有父 子帖子的自定义帖子 查看 父 帖子时 会使用插件来拉取其子帖子 并将这些子帖子显示在页面上的选项卡中 我们现在在多个网站上使用该自定义主题的新版本 并且不再使用父 子关系 相反 我们在自定义帖子类型中有元框 所有附
  • 最佳且简单的数据结构

    我正在尝试在 vb net 中创建以下矩阵 以便在处理过程中我可以获得字母表的匹配分数 例如 A 和 N 的匹配是什么 我将查看我的内置矩阵并返回 2 同样 P 和 L 的匹配是什么 我将查看我的内置矩阵并返回 3 请建议我如何去做 我试图
  • 安装apk时不显示权限

    我正在使用 FlashBuilder 使用 ActionScript 制作 Android 应用程序 我需要为我的应用程序使用 WiFi 权限 该应用程序在桌面上运行没有任何问题 AIR 桌面项目 现在 当我尝试为 Android 移动项目
  • Facebook python 营销 API AttributeError

    我正在尝试通过其 python 包 facebookapi 使用 Facebook Marketing API 这是一个代码片段 from facebookads adobjects customaudience import Custom
  • Google Classroom API 修改附件

    当执行courses courseWork studentSubmissions modifyAttachments方法 当我尝试将附件添加到学生提交的内容时 返回 403 错误 GoogleJsonResponseException co
  • ImageMagick:使用最大文件大小缩放 JPEG 图像

    我有一些 JPEG 图片 我想将它们缩小 另一个要求是文件大小不应大于 300kByte 这可能吗 请帮我举个例子 要将生成的图像限制为最大文件大小 可以使用命令行参数 define jpeg extent max value 像这样 co
  • 如何使用Ruby的self关键字

    据我了解self 它指的是该类的当前实例 无论如何 这不是始终的默认行为吗 例如 不是 self var one method args 相当于 var one method args 如果是的话有什么用self 有几个重要的用途 其中大部
  • Chrome 中的浏览器链接不刷新页面

    我正在关注this https learn microsoft com en us aspnet core client side using browserlink view aspnetcore 3 0用于启用浏览器链接并设置新 Bla
  • 从 Tkinter 或 PWM 接口打印

    我在 Python Mega Widgets 和 Tkinter 中创建了一个接口 它是 SQlite3 数据库的接口 查询结果以列表形式返回并显示在位于显示屏主框架上的备注字段中 我可以创建一个将从按钮启动的小功能吗 从默认打印机打印备注
  • 如何修复此错误 [Vue warn]:未知的自定义元素:使用 Jest 进行单元测试中的

    我在运行 npm run 测试时遇到问题 错误是 Vue warn Unknown custom element
  • 如何修复分布式事务管理器(MSDTC)已被禁用错误[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们正在使用 ASP NET 的事务范围功能来管理分布式事务 因此我们需要通过以下链接启用分布式事务 合作伙伴事务管理器已禁用对远程 网络事务的支持
  • 如何从匿名类内部访问封闭类实例变量?

    我如何访问instance variables从匿名类的方法内部 class Tester extends JFrame private JButton button private JLabel label some more publi
  • 在 JavaScript 中,我需要在“throw”之后“return”吗?

    我正在扔一个Error来自我的一个方法 我想提前退出 如下所示 No route found if null nextRoute throw new Error BAD ROUTE 我需要放一个return 我之后的声明throw 目前它对
  • Swift 3 加载 xib。 NSBundle.mainBundle().loadNibNamed 返回 Bool

    我试图弄清楚如何使用 xib 文件创建自定义视图 在这个question https stackoverflow com questions 39322772 swift add custom xib view as subview pro
  • 最常见 Mercurial 命令的 Git 等效项?

    我一直在使用 Mercurial 但想做一个 Git 的快速演示 Git 的等价物是什么 hg init start a project in the current directory hg addremove look for any
  • 将信号和槽附加到 QSharedPointer 内的对象

    我的应用程序包含几个这样的函数 void SomeClass set data provider DataProvider data provider connect data provider SIGNAL data available
  • EF6 实体的通用克隆

    我正在尝试获取与 EF6 0 2 一起使用的通用 CloneEntity 函数 public static T CopyEntity