在 C# 中克隆对象(EF 实体)

Clone an object (EF entity) in C#

使用 C# 8 e ASP.NET Core 我有以下内容:

  Context context = new Context();

  Post post1 = new Post {
    Enabled = true,
    Title = "Some title"
  };

  Post post2 = post1;
  post2.Enabled = false;

  context.Posts.Add(post1);
  context.Posts.Add(post2);

context 上,这是一个 EF DBContext,我只得到一个 post (post2);

也许我错了,但我认为我应该复制/克隆 post1 来定义 post2。

我说的对吗?如何做到这一点?

因为这一行:

Post post2 = post1;

post1post2是同一个对象,EF会把它们当作同一个对象。

你应该有一些克隆来创建一个全新的 post,比如:

Post post2 = new Post()
{
   Title = post1.Title,
   Enabled = false;
};

无需设置个别属性即可进行克隆的其他可能方法(有关详细信息,请参阅

Post post2 = (Post) context.Entry(post1).CurrentValues.ToObject();

因为classReferenceType,所以你只得到一个post2Enabledfalse,实际上是post1,它们与您的代码相同,post1 === post2.

我相信您的真实 class 包含比示例更多的属性。 所以如果你想要一个简单的Clone,你可以使用var post2 = (Post)post1.Clone();,但通常我们在复杂的对象中制作deep clone,你可以遵循这个post: Deep cloning objects