你可以直接注入数据库上下文
服务,如ContextBase
,然后在控制器中使用,这与普通的ASP.NET Core
应用没有区别!
Warning
请保持控制器中代码的整洁,建议通过Manager
实现业务,然后在控制器中调用,通常你不应该在控制器中直接访问数据库上下文
。
Manager
访问数据库上下文在某些情况下,你需要在Manager
操作其他实体,通常情况下,你可以通过注入其他实体的Manager
,然后调用相关的方法。
如果你需要保持在同一个工作单元(事务),Manager
提供了成员变量:
/// <summary> /// 实体仓储上下文 /// </summary> public DataStoreContext Stores { get; init; } /// <summary> /// 实体的只读仓储实现 /// </summary> public QuerySet<TEntity> Query { get; init; } /// <summary> /// 实体的可写仓储实现 /// </summary> public CommandSet<TEntity> Command { get; init; }
可用来访问其他实体的仓储以及数据库上下文,如:
Stores.CommandContext
, 等同于Command.Context
,可写数据库上下文。Stores.QueryContext
,等同于Query.Context
,只读数据库上下文。在Manager
中,可以直接使用EF Core
提供的公开Db
变量进行操作,如:
// 可写数据库 对应的实体 Command.Db.Where(u => u.Name == "").Include(u => u.Attributes).ToList(); // 只读数据库 对应的实体 Query.Db.Where(u => u.Name == "").Include(u => u.Attributes).ToList();
删除默认为软删除,如果想修改该行为,可在CommandStoreBase
类中将EnableSoftDelete
设置为false.
如果只想针对某个实体取消,可在实体对应的XXXCommandStore
类中,覆盖EnableSoftDelete
,将其设置为false.