Skip to content

Commit

Permalink
Update repository.md
Browse files Browse the repository at this point in the history
  • Loading branch information
2881099 authored Jan 29, 2024
1 parent 32188ec commit cb086ce
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions docs/guide/repository.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,60 @@ repo.CompareState(item) 可获取 item 的状态变化信息
Dictionary<string, object[]> CompareState(TEntity newdata);
```

## Ioc + 登陆信息

repo.DbContextOptions.AuditValue 适合与 Ioc AddScoped 信息结合。

如下示例:使用仓储插入/更新时自动使用登陆信息

```csharp
services.AddSingleton(fsql);
services.AddScoped(r =>
{
var user = r.GetService<User>();
var options = new RepositoryOptions();
options.AuditValue += (_, e) =>
{
if (user == null) return;

if (e.AuditValueType == AuditValueType.Insert &&
e.Object is IEntityCreated obj1 && obj1 != null)
{
obj1.CreatedUserId = user.Id;
obj1.CreatedUserName = user.Username;
}
if (e.AuditValueType == AuditValueType.Update &&
e.Object is IEntityModified obj2 && obj2 != null)
{
obj2.ModifiedUserId = user.Id;
obj2.ModifiedUserName = user.Username;
}
};
return options;
});
services.AddScoped(typeof(IBaseRepository<>), typeof(MyRepository<>));
services.AddScoped(typeof(IBaseRepository<,>), typeof(MyRepository<,>));

//以下实现 MyRepository
class MyRepository<TEntity, TKey> : BaseRepository<TEntity, TKey> where TEntity : class
{
public MyRepository(IFreeSql fsql, RepositoryOptions options) : base(fsql, null, null)
{
uowManager?.Binding(this);
if (options != null)
{
DbContextOptions.NoneParameter = options.NoneParameter;
DbContextOptions.EnableGlobalFilter = options.EnableGlobalFilter;
DbContextOptions.AuditValue += options.AuditValueHandler;
}
}
}
class MyRepository<TEntity> : MyRepository<TEntity, long> where TEntity : class
{
public MyRepository(IFreeSql fsql, RepositoryOptions options) : base(fsql, options) { }
}
```

## 过滤与验证

假设我们有 User(用户)、Topic(主题)两个实体,定义了两个仓储:
Expand Down

0 comments on commit cb086ce

Please sign in to comment.