gpt4 book ai didi

entity-framework - 如何为测试目的创建 EF codefirst 类的分离克隆?

转载 作者:行者123 更新时间:2023-12-04 07:24:57 25 4
gpt4 key购买 nike

我想创建一个集成测试,它从数据库中获取一个 EF 实体,将其克隆到一个分离的对象,对其进行修改,然后将其保存回来并再次与原始对象进行比较。

但是,我使用 AutoMapper 创建类的克隆,但事实证明这也被跟踪或原始对象的别名。我需要它与 EF 完全分离,并且能够在我的存储库类之外执行此操作(即不使用任何 EF 分离方法)。

这样做的原因是我的 EF 类包含其他类的嵌套集合,而 EF 不处理持久化整个对象树。因此,我的存储库类中的 Update() 方法处理这个问题,我希望我的 NUnit 测试来测试这个代码。我希望测试能够快速创建我的原始类的副本,而无需 EF 跟踪它。

最佳答案

Creating a cloned object containing current, original, or database values The DbPropertyValues object returned from CurrentValues, OriginalValues, or GetDatabaseValues can be used to create a clone of the entity. This clone will contain the property values from the DbPropertyValues object used to create it. For example:

using (var context = new UnicornsContext())
{
var unicorn = context.Unicorns.Find(1);

var clonedUnicorn = context.Entry(unicorn).GetDatabaseValues().ToObject();
}

Note that the object returned is not the entity and is not being tracked by the context. The returned object also does not have any relationships set to other objects.

The cloned object can be useful for resolving issues related to concurrent updates to the database, especially where a UI that involves data binding to objects of a certain type is being used. (See Part 9 for more details on dealing with optimistic concurrency.)

*来自 http://blogs.msdn.com/b/adonet/archive/2011/01/30/using-dbcontext-in-ef-feature-ctp5-part-5-working-with-property-values.aspx

希望对他人有所帮助

关于entity-framework - 如何为测试目的创建 EF codefirst 类的分离克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5597270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com