情况:假设我们正在执行连接两个内存列表的LINQ查询(因此不涉及DbSets或SQL查询生成),并且此查询也有一个where
子句.这where
仅过滤原始集合中包含的属性(from
查询的一部分).
问题: linq查询解释器是否优化了这个查询,因为它首先在执行where
之前执行join
,而不管我是where
在之前还是之后写的join
? - 所以它不必在以后不包含的元素上执行连接.
示例:例如,我有一个categories
列表,我想要与products
列表一起加入.但是,我只对category
with ID
1 感兴趣.无论我是否编写,linq解释器内部执行完全相同的操作:
from category in categories
join prod in products on category.ID equals prod.CategoryID
where category.ID == 1 // <------ below join
select new { Category = category.Name, Product = prod.Name };
Run Code Online (Sandbox Code Playgroud)
要么
from category in categories
where category.ID == 1 // <------ above join
join prod in products on category.ID …
Run Code Online (Sandbox Code Playgroud) 我对 Docker 有点陌生,并试图围绕其中的一些概念进行思考。
在很多教程和文章(实际上,几乎所有)中,这是一个典型的用于 create-react-app 和 nginx 配置的 Dockerfile:
# CRA
FROM node:alpine as build-deps
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
COPY . ./
RUN npm run build
# Nginx
FROM nginx:1.12-alpine
COPY --from=build-deps /usr/src/app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)
假设一切都按预期进行,图像将是巨大的。
我有采取稍微不同的方法的想法。在npm install && npm run build
本地运行,然后将其作为 Dockerfile:
FROM nginx:1.12-alpine
WORKDIR /opt/app-root
COPY ./nginx/nginx.conf /etc/nginx/
COPY ./build ./src/dist/
COPY ./node_modules .
USER 1001
EXPOSE 8080
ENTRYPOINT ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?每当我跑步时docker …
为了从云功能访问机密,Google 提供了Secret Manager API:
Secret Manager存储 API 密钥、密码、证书和其他敏感数据。它提供了便利,同时提高了安全性。
另一方面,Firebase 建议通过其环境配置 API存储机密,如其文档和示例中明确提到的:
通常,您需要对功能进行其他配置,例如第三方 API 密钥或可调整设置。Firebase SDK for Cloud Functions 提供内置环境配置,使您可以轻松地为项目存储和检索此类数据。
问题:
Firebase 的配置 API 在处理数据的方式上似乎更加简单,而且还是免费的,这使得它比 Secret Manager API 更适合用于 Firebase 项目。
在 Firebase 项目中比较这两个 API 有何优缺点?最重要的是,在使用 Firebase 的配置 API 而非 Secret Manager API 时,在安全性方面是否存在任何缺点?
它已被充分记录,如何将依赖项注入服务.
问题:但是在ASP.NET Core 2.0中是否(已经)可以让系统的DI机制自动将服务注入方法或属性?
旁注:在PHP-Symfony中,这种模式称为setter injection.
示例:
假设MyBaseController
我的项目中的所有控制器都有一个公共类,我希望注入一个服务(例如UserManager服务),MyBaseController
以后可以在所有子控制器中访问.我可以使用构造函数注入将服务注入子类并将其传递base(userManager)
给父类.但是必须在所有控制器的所有子构造器中执行此操作非常繁琐.
所以我想像这样设置一个setter MyBaseController
:
public abstract class MyBaseController : Controller
{
public UserManager<User> userManager { get; set; }
// system should auto inject UserManager here
public void setUserManager(UserManager<User> userManager) {
this.userManager = userManager;
}
}
Run Code Online (Sandbox Code Playgroud)
...所以我不必在每个子构造函数中执行以下操作只是为了将依赖项传递给父级:
public class UsersController : MyBaseController
{
public ChildController(UserManager<User> userManager) : base(userManager) {}
Run Code Online (Sandbox Code Playgroud)
更新:这里给出的答案是我想要实现的,但问题是ASP.NET Core 1.0,我对ASP.NET Core 2.0中是否添加了任何解决方案感兴趣.
c# dependency-injection asp.net-core-2.0 asp.net-core-mvc-2.0
情况:
对于我们的SaaS API,我们使用基于架构的多租户,这意味着每个客户(〜租户)在同一个(postgres)数据库中都有自己独立的架构,而不会干扰其他客户。每个模式都包含相同的基础实体模型。
每次向系统注册新客户时,都会在数据库中自动创建一个新的隔离模式。这意味着该架构是在运行时创建的,并且事先未知。客户的架构是根据客户的域命名的。
对于到达我们API的每个请求,我们从JWT中提取用户的租约关联,并确定使用哪个db模式来为此租户执行请求的db操作。
问题
通过TypeORM(例如,使用createConnection)建立与(postgres)数据库的连接之后,我们为db-operation设置架构的唯一机会是诉诸于createQueryBuilder
:
const orders = await this.entityManager
.createQueryBuilder()
.select()
.from(`${tenantId}.orders`, 'order') // <--- setting schema-prefix here
.where("order.priority = 4")
.getMany();
Run Code Online (Sandbox Code Playgroud)
这意味着,我们不得不使用,QueryBuilder
因为在使用EntityManager API(或Repository API)时似乎无法设置架构。
但是,我们希望/需要使用这些API,因为它们更容易编写,需要更少的代码并且也不容易出错,因为它们不依赖于使用基于字符串的语法“手动”编写查询。
题
如果是TypeORM,在使用EntityManager
或存储库时是否可以通过某种方式设置db模式?
像这样吗
// set schema when instantiating manager
const manager = connection.createEntityManager({ schema: tenantDomain });
// should find all matching "order" entities within schema
const orders = manager.find(Order, { priority: …
Run Code Online (Sandbox Code Playgroud) 我看到了一个 npm 存储库,在 package.json 中被称为git+ssh://git@github.com/xxx.git
。我知道这是 ssh 协议,但我不知道 git+ssh 在克隆存储库时做什么,我只使用git@github.com/xxx.git
. 我用谷歌搜索了一下,但找不到任何结果。
在我的ASP.NET Core 2应用程序中,每当某种类型的对象被序列化时(通过JSON.NET),我想在路径名字符串前写入当前主机名。
对于此任务,我需要以某种方式将其HttpContext
注入我的自定义JsonConverter中以获取主机。然而,由于我没有访问HttpContext
内startup.cs ConfigureServices
(其中转换器注册到MvcJsonOptions
),我不知道如何注入HttpContext
到我的JsonConverter
。
c# dependency-injection json.net asp.net-core asp.net-core-2.0
我的问题
是否有可能以某种方式T
从附加到此泛型类中方法的方法属性中访问泛型类的类型参数?
一个例子
例如,说我有一个通用控制器MyBaseController
处理T
由子控制器扩展的某种资源类型MyChildController
。
public class MyChildController : MyBaseController<BlogPost>
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在使用Swagger记录我的API,更具体地说是Swashbuckle,因此,我要使用ProducesResponseType注释我的操作以指定操作的返回类型。这很复杂,因为ProducesResponseType
需要一个Type
表示操作返回值的类的参数。
public abstract class MyBaseController<T> : Controller where T : IResource
{
[HttpGet, ProducesResponseType(T)] // <-- DOESN'T WORK!
public async Task<IActionResult> doSomething()
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我需要T
以某种方式解决typeof(BlogPost)
有什么想法,还是不可能?
c# ×4
asp.net-core ×2
.net-core ×1
build ×1
devops ×1
docker ×1
dockerfile ×1
firebase ×1
generics ×1
git ×1
github ×1
join ×1
json.net ×1
linq ×1
multi-tenant ×1
nestjs ×1
node.js ×1
npm ×1
orm ×1
package.json ×1
postgresql ×1
reflection ×1
typeorm ×1
where ×1