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 实体的通用克隆 的相关文章

  • MVC 3 EF 4.1 dbContext - 删除具有不可空外键关系的一对多数据对象

    我正在使用 MVC 3 EF 4 1 和 dbContext 我需要知道如何删除具有不可空外键的一对多关系的实体 当我删除子实体并执行 SaveChanges 时 出现错误 操作失败 无法更改关系 因为一个或多个外键属性不可为空 当关系发生
  • LINQ to Entities - 无法将“System.DateTime”强制转换为 orderBy 中的“System.Object”类型

    我试图从传入的 Expression gt 中按日期订购实体的 IQueryable 并收到错误 无法将类型 System Nullable 1 转换为类型 System Object LINQ to Entities 仅支持转换实体数据模
  • 在实体框架上克隆数据[重复]

    这个问题在这里已经有答案了 我正在创建软件 用户可以在其中基于旧产品创建新产品 现在我需要使用实体框架进行复制 克隆操作 首先我开始这样写 foreach sourcedata1 in table1 create new table cop
  • 好的实体框架示例应用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一些使用实体框架的优秀 asp net 示例应用程序 我看到了几个 NorthWind 应用
  • EF Core 一对多关系列表返回 null

    我正在尝试学习如何在 EF Core 中正确利用 DbContext 我有一个团队课程 public class Team public int ID get set public string Name get set public bo
  • EF Core 模型构建约定

    在 EF6 中 可以在模型构建期间根据属性类型定义约定 就像这样 public interface IEntity Guid Id get public class MyEntity IEntity public Guid Id get s
  • 在 MVC 3 中,我无法让 @Html.DisplayFor 呈现格式化字符串

    我希望这是一个非常简单的问题 尽管经过大量谷歌搜索后 我还没有能够解决这个问题 我正在使用 MVC 3 开发一个购物车网站 并使用代码优先的实体框架 我发送的模型是 Product 对象的列表 每个对象都包含此属性 Required Err
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • 自数据库创建以来,支持“ApplicationDbContext”上下文的模型已发生更改

    首先 我在其他地方没有看到这个错误 我想这不是重复的 所以请先阅读整个情况 一切都工作得很好然后我尝试更新我的模型类之一 the 应用类现在更新已被评论 我将在下面列出 我遇到了这个丑陋的错误 自创建数据库以来 支持 Application
  • 即使定义了其他主键,实体框架 6 也会创建 Id 列

    我将 DataObject 定义为 public class SensorType EntityData PKs public string CompanyId get set public string ServiceId get set
  • 如何为连接范围变量编写动态 where 子句

    我一直在使用 LINQ 进行查询 但遇到了动态 where 子句的问题 我想检查一个条件 如果为真 则将其添加到我的查询中 问题在于 where 正在使用我的连接之一中的范围变量之一 我的工作查询如下 var query from proj
  • 我们可以使用枚举作为类型安全的实体 ID 吗?

    我们正在 EF 6 1 代码优先设置中使用一个相当大的模型 并且我们使用整数作为实体 id 不幸的是 这并不像我们希望的那样类型安全 因为人们很容易混淆 id 例如比较不同类型的实体的 id myblog Id somePost Id 或类
  • 如何使用Entity Framework Code First CTP 5存储图像?

    我只是想弄清楚是否有一种简单的方法可以使用 EF Code First CTP 5 存储和检索二进制 文件 数据 我真的很希望它使用 FILESTREAM 类型 但我真的只是在寻找某种方法让它工作 我总是创建另一个类 例如ProductIm
  • EF 6:映射复杂类型集合?

    EF 6 代码优先 是否支持复杂类型集合 值对象集合 映射 我知道它支持复杂类型 但还没有找到我们拥有复杂类型集合的示例 例如 假设您有一个名为 Student 的实体 其中包含联系人集合 对于 NH 我可以简单地说 Student 有一个
  • Breezejs 加载具有相关数据的实体时出错

    毫无疑问 我在这里遗漏了一些明显的东西 所以也许互联网的集体力量可以向我指出这一点 我有一个代码优先的数据库结构 由用户 组和一个链接两者的 GroupUsers 表组成 EF 本身可以处理 n n 关系 但 Breezejs 需要显式地使
  • LINQ 按降序排序,底部为空值 [重复]

    这个问题在这里已经有答案了 我有这样的表达 troubletickets db ServiceTickets Include t gt t Company Include t gt t UserProfile troubletickets
  • AssociationSet 中的关系处于“已删除”状态

    我正在尝试在我的网站中创建新帖子 但由于某种原因 EF 抛出以下错误 来自 PostAttributeValue Definition 关联集的关系 处于 已删除 状态 给定多重约束 相应的 PostAttributeValue Defin
  • 实体框架在不同的工作站上生成不同的查询

    我们在单个开发人员机器和一些客户端上遇到问题 单个 Linq 查询 生成两个不同的 SQL 查询 问题实际上是第二个查询有 firebird 不支持的 OUTER APPLY 语句 我们认为这不是代码问题 而是环境问题 但我会粘贴代码 li
  • NotSupportedException:LINQ to Entities 无法识别该方法[重复]

    这个问题在这里已经有答案了 我正在尝试使此查询与 EF 一起使用 但它抛出异常 var c ac Communities OrderBy o gt o Posts Count Skip page limit Take limit Selec
  • EF 中的 GUID COMB 策略

    有没有办法使用 CodeFirst 设计为新的 Entity Framework 4 1 中的对象实现 Guid COMB 身份策略 我想设置StoreGeneratedPattern可以 但它仍然给我正常的 GUID 为什么要担心数据库中

随机推荐

  • 再次显示相同的 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