gpt4 book ai didi

c# - .NET、分层架构和 MongoDB - 使用什么作为 ID?

转载 作者:IT老高 更新时间:2023-10-28 13:27:44 33 4
gpt4 key购买 nike

我正在开发一个 .NET Web 服务,同时尝试维护一种分层架构,该架构将我的模型保存在一个项目中,并将数据库访问 (DAL) 保存在另一个项目中。这背后的想法是,如果我必须更改数据库技术,只需创建一个不同的 DAL,而应用程序的其余部分保持不变。

在我正在开发的数据访问层中,我使用的是 Mongo DB C# Driver .

我已经看到了:

  • 名为“ID”的属性将被 C# 驱动程序映射为数据库的“_id”(约定优于配置);

  • MongoDB 中的整数 + 自动增量 is not a good idea ;

  • 在 MongoDB 中使用 Guid 作为 ID isn't a good idea either ;

  • 存储在 MongoDB 中的文档 ID 的推荐数据类型为 ObjectID . C# 驱动程序提供了一个类来表示这一点;

    • 但是,如果我在我的模型中使用这种数据类型(来自 MongoDB.Bson),那么它们将依赖于 MongoDB C# 驱动程序,我不希望这样:我想要我的模型独立于数据库;只有我的 DAL 可以依赖我使用的任何数据访问技术。

那么我应该为我的 POCO 的 ID 使用什么数据类型以保证数据库中的唯一性? Guid 的字符串表示在性能方面会很糟糕吗?

欢迎您的反馈。

最佳答案

好问题。

根据经验,我可以说您是对的:GUID 和自动增量都不是最好的主意(GUID 比自动增量好很多),但不仅仅是因为 SO 中提到的原因您链接到的问题,但主要是因为您需要了解单调与非单调键的含义。

使用 ObjectIds,我看到三个选项:

  • 域模型和 DAL 之间的映射。在域模型中,您可以使用 objectid 的字符串表示。这有点烦人,但它迫使您分离关注点。

  • 使用你自己的数据类型并实现一个类型转换器/mongodb 序列化器。我没有尝试过,但我不明白为什么这不起作用。

  • 接受 MongoDB 依赖项。毕竟,如果您真的更换数据库,那将是一项巨大的任务。不同的数据库具有非常不同的特性,需要非常不同的数据模型。恕我直言,整个“换出数据库”都是假的,这从来都不是那么容易,而且数据库是一个比任何人都想承认的更容易泄漏的抽象。试图保持独立是一个 PITA。无论如何,对单词 ObjectId 进行搜索和销毁将不到其他工作的 1%。

关于c# - .NET、分层架构和 MongoDB - 使用什么作为 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726985/

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