排名
3
文章
317
粉丝
22
评论
14
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

Guid主键的实体
如果你的实体Id类型为 Guid,有一些好的实践可以实现:
创建一个构造函数,获取ID作为参数传递给基类.
— 如果没有为GUID Id赋值,ABP框架会在保存时设置它,但是在将实体保存到数据库之前最好在实体上有一个有效的Id.如果使用带参数的构造函数创建实体,那么还要创建一个 private 或 protected 构造函数. 当数据库提供程序从数据库读取你的实体时(反序列化时)将使用它.
不要使用 Guid.NewGuid() 来设置Id! 在创建实体的代码中使用IGuidGenerator服务传递Id参数. IGuidGenerator经过优化可以产生连续的GUID.这对于关系数据库中的聚集索引非常重要.
示例实体:
public class Book : Entity<Guid>
{
public string Name { get; set; }
public float Price { get; set; }
protected Book()
{
}
public Book(Guid id)
: base(id)
{
}
}
在应用服务中使用示例:
public class BookAppService : ApplicationService, IBookAppService
{
private readonly IRepository<Book> _bookRepository;
public BookAppService(IRepository<Book> bookRepository)
{
_bookRepository = bookRepository;
}
public async Task CreateAsync(CreateBookDto input)
{
await _bookRepository.InsertAsync(
new Book(GuidGenerator.Create())
{
Name = input.Name,
Price = input.Price
}
);
}
}
- BookAppService 注入图书实体的默认仓库,使用InsertAsync方法插入 Book 到数据库中.
- GuidGenerator类型是 IGuidGenerator,它是在ApplicationService基类中定义的属性. ABP将这样常用属性预注入,所以不需要手动注入.
- 如果你想遵循DDD最佳实践,请参阅下面的聚合示例部分.
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价