abp vnext 实体的guid主键 电脑版发表于:2022/5/29 17:23 ####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最佳实践,请参阅下面的聚合示例部分.