gpt4 book ai didi

C# MongoDB : How can I map a domain object (BsonIgnoreIfDefault needed on Id property)

转载 作者:可可西里 更新时间:2023-11-01 10:32:02 26 4
gpt4 key购买 nike

我已经开始了一个小而简单的项目(一个非常原始的博客)来获得一些 DDD 的实践经验,虽然我相信我理解基本概念,但我还不能解决以下问题。

给定一个 POCO 对象“post”,我想使用一个存储库来持久化它,使用带有 upsert 参数的 mongodb collection.update 方法实现(参见下面的代码)

public Post Save(Post p)
{
var wc = collection.Update(
Query<Post>.EQ<string>(p0 => p0.permalink, p.permalink),
Update<Post>.Replace(p),
UpdateFlags.Upsert);
return p;
}

但是,为了使更新插入正常工作,似乎有必要将特定于 mongodb 的属性应用于您的 Id 字段,详见此答案:https://stackoverflow.com/a/20224022/741695

因此,我只能看到两种可能的行动方案:

1) 将对 mongodb 程序集的引用添加到我的域库项目中,但感觉不对,因为 mongodb 是存储库实现细节(因此属于 DAL)

2) 将“post”实例(poco 域对象)传递给 PostRepository 实现,并通过将域对象映射到 DTO 和从 DTO 映射来处理任何与实现相关的问题

虽然第二种解决方案似乎符合 DDD 原则,但实现起来也比第一种更昂贵,所以我想知道是否有更好的替代方案。

提前感谢您的反馈。

最佳答案

您不必使用该属性来映射 Id,您不能在 DAL 中使用 RegisterClassMap 执行此操作:

BsonClassMap.RegisterClassMap<Post>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(p => p.Id));
});

顺便说一句:您可以在不映射 Id 的情况下进行更新插入,只是不能使用简单的 Update<Post>.Replace(p) .您需要自己创建更新。

关于C# MongoDB : How can I map a domain object (BsonIgnoreIfDefault needed on Id property),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176026/

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