在 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;
post1
和post2
是同一个对象,EF会把它们当作同一个对象。
你应该有一些克隆来创建一个全新的 post,比如:
Post post2 = new Post()
{
Title = post1.Title,
Enabled = false;
};
无需设置个别属性即可进行克隆的其他可能方法(有关详细信息,请参阅 )
Post post2 = (Post) context.Entry(post1).CurrentValues.ToObject();
因为class
是ReferenceType
,所以你只得到一个post2
,Enabled
是false
,实际上是post1
,它们与您的代码相同,post1 === post2
.
我相信您的真实 class 包含比示例更多的属性。
所以如果你想要一个简单的Clone
,你可以使用var post2 = (Post)post1.Clone();
,但通常我们在复杂的对象中制作deep clone
,你可以遵循这个post:
Deep cloning objects
使用 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;
post1
和post2
是同一个对象,EF会把它们当作同一个对象。
你应该有一些克隆来创建一个全新的 post,比如:
Post post2 = new Post()
{
Title = post1.Title,
Enabled = false;
};
无需设置个别属性即可进行克隆的其他可能方法(有关详细信息,请参阅
Post post2 = (Post) context.Entry(post1).CurrentValues.ToObject();
因为class
是ReferenceType
,所以你只得到一个post2
,Enabled
是false
,实际上是post1
,它们与您的代码相同,post1 === post2
.
我相信您的真实 class 包含比示例更多的属性。
所以如果你想要一个简单的Clone
,你可以使用var post2 = (Post)post1.Clone();
,但通常我们在复杂的对象中制作deep clone
,你可以遵循这个post:
Deep cloning objects