Abp 官网开始的教程例子,是IRpositoty<entity> 直接出现在应用层。但是如果是一个聚合根也会这样吗?  那么聚合根是访问仓储的最小单元,要通过聚合根来操作业务,就是实体,那么实体的增删改查,也应该在聚合根里面。

这就就有一个问题,实体继承了聚合根,,他没有仓储,怎么保存呢?

方法一: 依赖注入,这是不行的,这样数据库迁移不成功。

  public class Order :AggregateRoot, IRepository<Order>, ICreationAudited
{
[NotMapped]
private IRepository<Order> _repository { get; set; }
public Order(IRepository<Order> repository)
{
_repository = repository;
}
public long? CreatorUserId { get; set; }
public DateTime CreationTime { get; set ; }
public List<OrderItem> OrderItem { get; set; }
public string Remark { get; set; }
public Address Address { get; set; } public Order Insert(Order entity)
{
return entity;
}
}
 
方法二:继承仓储接口,
public class Order :AggregateRoot, IRepository<Order>, ICreationAudited
{ public long? CreatorUserId { get; set; }
public DateTime CreationTime { get; set ; }
public List<OrderItem> OrderItem { get; set; }
public string Remark { get; set; }
public Address Address { get; set; } public Order Insert(Order entity)
{
return entity;
}
}
   这样的问题,是应用层怎么调用呢?应用层还是要出现仓储。
 方法三:实现聚合根接口,继承仓储类:在代码中是Test2.
 
    public class Test2 :  Test2Repository, IAggregateRoot, ICreationAudited
{
public long? CreatorUserId { get; set; }
public DateTime CreationTime { get; set; } public string Remark { get; set; } public ICollection<IEventData> DomainEvents => throw new NotImplementedException(); public int Id { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public bool IsTransient()
{
throw new NotImplementedException();
}
}

这样编译不过去,因为Test2Repository在EF那一层,而Core 是谁也不依赖的,在最下面,这个也是行不通的。

方法四:是这个这个聚合根,再实现一个IOrder 接口,这个接口和仓储接口有重合,在应用层,暴露IOrder 接口就行了。

  IOrder可以在应用层依赖注入进去,因为他的postfix 是Order。
  泛型方法在调用的时候,可以作为类型传递的(参数或返回值)
      这个执行完,不会保存,
上面是3个不可行的,下面有个方法可以
Success方法一:使用属性注入就可以了。注意,要把聚合根放在依赖注入框架中。这个例子是Test
       IocManager.Register<Test>(DependencyLifeStyle.Transient);
 
 
 

最新文章

  1. Zabbix3 agent端安装(二)
  2. Linux系统glibc库版本信息查看
  3. Example For maven-compiler-plugin
  4. SAP SLT (Landscape Transformation) 企业定制培训
  5. Bigfish的重新安装
  6. NOIP2003加分二叉树[树 区间DP]
  7. 让Asp.Net WebAPI支持OData查询,排序,过滤。
  8. WinStore控件之TextBlock
  9. Android控件之MultiAutoCompleteTextView(自动匹配输入的内容)
  10. selenium python (十二)下拉框的处理
  11. Hadoop 删除节点步骤
  12. [LeetCode] 303. Range Sum Query - Immutable (Easy)
  13. 使用Intent实现Activity的隐式跳转
  14. Resharper TAB 傻吊
  15. VSTO学习笔记(十四)Excel数据透视表与PowerPivot
  16. 【开发技术】java中代码检查checkStyle结果分析
  17. js 原型规则与示例
  18. arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
  19. A tuple is defined as a function
  20. [USACO18DEC]Cowpatibility

热门文章

  1. Linux -bash: redis-cli: command not found(亲测可行)
  2. 如果你的电脑想升级并且支持m.2接口
  3. lnmp搭建-手动版
  4. iOS面试-堆和栈的区别
  5. Egret入门学习日记 --- 第六篇(书中 3.6~3.9节 内容)
  6. 配置zabbix监控windows,cmd运行报错cannot connect to Service Manager: [0x00000005]
  7. node.js基础---增删
  8. 一文带你了解babel-preset-env
  9. MongoDB之源生基础概念与语句测试
  10. 正式发布! .NET开发控件集ComponentOne 新版本加入Blazor UI