有哪些好的.net的开源项目?

如题所述

在领域驱动设计(DDD)中,强类型Id的概念尤为重要。使用强类型Id作为标识属性的类型,相较于通用类型如int、Guid等,能带来显著优势。例如,一个根据Id删除用户的方法签名如下:

方法的参数无法明确Id代表的业务含义,若错误地将货物的Id传入,仍能执行。而使用通用类型,则业务属性弱化。自定义UserId类型如下:

这样,User类中Id属性的类型从long变为UserId类型。相应的RemoveById方法签名也调整为:

一眼可识Id参数的业务含义,避免了错误传入不同业务类型Id的问题。

在.NET 6及之前版本,Entity Framework Core(EF Core)难以优雅地支持强类型Id。然而,.NET 7中的EF Core提供了对此的支持,详细信息请参阅官方文档中的“Value generation for DDD guarded types”部分。

尽管EF Core内置了强类型Id支持,但实现需大量代码编写,复杂性高。因此,微软文档警告谨慎使用强类型Id。为简化此过程,我基于.NET的SourceGenerator技术开发了一个开源项目。

此项目在编译时自动生成相关代码,开发人员仅需在实体类上标注[HasStronglyTypedId]即可实现强类型Id。项目地址:github.com/yangzhongke/...

以下是一个将所有代码集成至控制台项目示例,以展示使用方法。更多复杂用法请参照项目文档及Examples文件夹。

注意:项目可能随更新而调整使用方法,请参照最新官方文档。

使用步骤如下:

1. 创建.NET7控制台项目,安装Nuget包LessCode.EFCore、LessCode.EFCore.StronglyTypedIdCommons、LessCode.EFCore.StronglyTypedIdGenerator。同时确保使用SQLServer及EF core迁移,还需安装Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools。

2. 新建实体类型Person,在类上标注[HasStronglyTypedId(typeof(Guid))]启用强类型Id。编译时自动生成名为PersonId的类,声明一个名为Id、类型为PersonId的属性。

默认PersonId在数据库中保存为long类型,若需Guid类型,可标注[HasStronglyTypedId(typeof(Guid))]。

编译项目,检查成功编译后,反编译生成的dll,验证自动生成了PersonId、PersonIdValueConverter两个类。

3. 编写DbContext,实现数据库迁移等操作。

4. 测试代码,验证强类型Id在EFCore中的应用。

强类型Id优化了EFCore与DDD的结合,简化了代码实现,降低复杂性。通过此开源项目,开发者仅需在实体类上标注一行代码,即可便捷实现强类型Id功能。期待它能为开发者提供帮助,欢迎分享至技术社区。
温馨提示:内容为网友见解,仅供参考
无其他回答

.netcore有哪些不错的开源项目?
以下为推荐的几个.NET Core开源项目:1. Masuit.Tools 这是一个包含了加密解密、反射操作、硬件信息、日期时间扩展等常用封装的开源项目。其开源协议规定,一旦因违反劳动法的公司使用该项目,项目作者有权追讨使用费或不允许使用包含该项目的源代码。项目特色功能包括Socket客户端操作类、模板引擎、任意...

一些小众冷门但却非常实用的.NET(Core)开源库推荐
首先,是我的开源作品Masuit.Tools,它集合了丰富的功能,涵盖了数据库操作、日期时间处理、文件操作、硬件监控、HTML操作、日志管理、多媒体文件操作、网络通信、Nosql操作、反射、加密安全、字符串扩展、Win32API以及全局扩展等。它的存在使得我的代码更加简洁高效,几乎不可或缺。目前,该库在GitHub上的s...

有哪些好的.net的开源项目?
1. 创建.NET7控制台项目,安装Nuget包LessCode.EFCore、LessCode.EFCore.StronglyTypedIdCommons、LessCode.EFCore.StronglyTypedIdGenerator。同时确保使用SQLServer及EF core迁移,还需安装Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools。2. 新建实体类型Person,在类上标注[HasS...

一些小众冷门但却非常实用的.NET(Core)开源库推荐
首先,我们有自家的Masuit.Tools,它集成众多功能,如数据库操作、日期时间处理、文件管理、硬件检测、Html操作、日志记录、多媒体操作、网络请求、Nosql操作、反射、加密安全、字符串扩展、Win32 API等,且全网已超过1900个星。Masuit.LuceneEFCore.SearchEngine是一个基于EntityFrameworkCore和Lucene.NET的本...

盘点5个基于SkiaSharp开发的.Net开源图形项目
1. **富文本编辑工具**:此工具作为开源的富文本编辑器,支持.Net45、.NetCoreapp2.1、.Net 5,提供丰富的字体样式,包括粗体、斜体、下划线等,同时支持Emoji和其他国际字符集的字体回退。此工具的代码地址位于github.com\/toptensoftwa...。2. **图像绘制工具**:此基于Avalonia开发的项目可在...

.NET Core\/.NET 开源项目汇总:WPF组件库
一、MaterialDesignInXAML MaterialDesignInXAML是一个完全开源的WPF GUI库,它与MahApps和Dragablz兼容,提供了一套现代流行的设计语言,使得开发人员能够轻松地将美观的桌面应用程序带入生活。该库提供了丰富的组件和功能,包括:首页:布局简洁、清爽,效果直观。支持主题风格切换:库内包含数十种颜色风格,...

开源推荐:.NET 6 + Abp框架一个轻量级微服务库
介绍 轻量级微服务库,基于.NET 6 + Abp框架,帮助快速转化现有项目为面向服务体系结构,实现模块间的松耦合。此库借力于RabbitCloud与jimu项目,集其精华。特点与实现 快速启动网关(客户端)GatewaySample,仅需调整Startup.cs文件,将AddAbp替换为AddSoaClient,同时删去UseAbp与UseSoaClient。GatewaySample...

3个.NET开源免费的仓库管理系统(WMS)
KopSoftWms是基于.NET 6.0开发的一款开源免费WMS仓库管理系统,支持sqlserver、mysql等主流数据库,ORM使用国内开源框架SqlSugar。这3个系统均已在GitHub开源,方便用户下载、使用和贡献代码。此外,这3个优秀项目已被收录到C#\/.NET\/.NET Core优秀项目和框架精选中,关注此精选可了解最新动态和最佳实践,提高...

.NET Core\/.NET5\/.NET6 开源项目:工作流组件
开源项目是共享智慧的结晶,体现了开发者对社区的贡献。在使用这些项目时,我们应该心存感激,严格遵守开源协议。ELSA:工作流库 ELSA 是一个支持在任何.NET Core 应用程序中执行工作流的库。工作流可通过代码、JSON、YAML 或 XML 定义,提供可视化设计器,支持持久化,具有长期运行工作流的本机支持。目...

开源.NET8.0小项目伪微服务框架(分布式、EFCore、Redis、RabbitMQ、M...
项目采用了.NET 8.0 技术栈,结合了分布式、EFCore、Redis、RabbitMQ、Mysql等关键技术,构建了一个基础服务框架。框架设计力求简洁,但因作者思考与架构能力尚有提升空间,以及开发时间紧张,项目仍在初期阶段。读者可通过提供的链接访问项目详情,了解当前单节点服务部署情况。项目结构以`sun.Core`作为核心...

相似回答
大家正在搜