我使用 DDD 构建了我的项目,它看起来像这样:
| CompanyName.API
| MyControllerThatRequiresJwtToken << Entry point
| CompanyName.Application
| CompanyName.Data
| EfCoreContext << I would like to get the claims here
| CompanyName.Domain
| CompanyName.IoC
| CompanyName.Test
| CompanyName.UI
Run Code Online (Sandbox Code Playgroud)
我正在使用Z.EntityFramework.Plus.Audit.EFCore来审核所有数据更改。我将它添加到 CompanyName.Data 项目中,因为这是我的 EF 上下文所在的位置。
问题是: API 中的所有请求都需要 JWT 令牌。我想在将保存到数据库中的 Audit 对象中设置发送请求的人的用户名,但是我无权访问数据层中的 HttpContext 。
获取此信息的最佳方法是什么?也许将 IHttpContextAccessor 注入数据层?使数据层“依赖于 Http”,这听起来不是一个好计划。
更新
我不确定如何将它从控制器传递到上下文。我相信它需要以某种方式注入。
EfCoreContext.cs 的片段
public override int SaveChanges()
{
var audit = new Audit();
audit.CreatedBy = "JWT Username"; // << I'd need it here
audit.PreSaveChanges(this);
var …Run Code Online (Sandbox Code Playgroud) 在Entity Framework中,可以通过以下方式检查表的存在:
bool exists = context.Database
.SqlQuery<int?>(@"
SELECT 1 FROM sys.tables AS T
INNER JOIN sys.schemas AS S ON T.schema_id = S.schema_id
WHERE S.Name = 'SchemaName' AND T.Name = 'TableName'")
.SingleOrDefault() != null;
Run Code Online (Sandbox Code Playgroud)
我使用EF Core 2.1并且该方法SqlQuery不存在.
检查表是否存在的正确方法是什么?理想情况下,无需尝试访问该表,并假设在抛出异常时它不存在.
编辑:我最后的实施
public bool TableExists(string tableName)
{
return TableExists("dbo", tableName);
}
public bool TableExists(string schema, string tableName)
{
var connection = Context.Database.GetDbConnection();
if (connection.State.Equals(ConnectionState.Closed))
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = @"
SELECT 1 FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA …Run Code Online (Sandbox Code Playgroud) I'm using SASS (.scss) for my current project.
HTML
<div class="colours colours--blue">
<!-- This should be blue -->
</div>
<div class="colours colours--yellow">
<!-- This should be yellow -->
</div>
<div class="colours colours--blue colours--yellow">
<!-- This should be green -->
</div>
Run Code Online (Sandbox Code Playgroud)
SCSS
.colours {
width: 50px;
height: 50px;
&--blue {
background-color: blue;
}
&--yellow {
background-color: yellow;
}
&--blue (AND) &--yellow { /* <<< HOW TO CREATE THIS SELECTOR? */
background-color: green;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建每个学生每天最高分的摘要.
示例数据:
???????????????????????????????????????????????
? id ? student_id ? score ? date_time ?
???????????????????????????????????????????????
? 1 ? 1 ? 5 ? 2018-07-01 9:30 ?
? 2 ? 1 ? 3 ? 2018-07-01 15:30 ?
? 3 ? 1 ? 7 ? 2018-07-02 8:30 ?
? 4 ? 2 ? 7 ? 2018-07-01 9:30 ?
? 5 ? 2 ? 8 ? 2018-07-01 15:30 ?
? 6 ? 2 ? 8 ? 2018-07-02 8:30 ?
? 7 ? 3 ? 4 ? …Run Code Online (Sandbox Code Playgroud)