小编Jos*_*h L的帖子

实体框架核心"实体类型'XXX'需要定义主键."

所以我目前正在尝试使用Entity Framework Core创建一个代码,首先用于显示应用程序用户已完成的讲座的表.我的模型看起来像这样:

public class LectureCompletion
{
    [Key,  Column(Order = 0)]
    [ForeignKey("Lecture")]
    public Lecture LectureId { get; set; }

    [Key,  Column(Order = 1)]
    [ForeignKey("User")]
    public ApplicationUser UserId{ get; set; }

    public bool Completed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想使用UserIdLectureId作为唯一的复合键.但是我收到此错误:

实体类型'LectureCompletion'需要定义主键.

我不明白为什么会这样,因为我明确地将我的关键属性放在正确的位置?我可以ApplicationUser用作外键/主键吗?

这是我的Lecture模型:

public class Lecture
{
    [Key]
    public int LectureId { get; set; }

    public string ModuleName { get; set; }
    public string LectureName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的ApplicationDBContext.cs: …

c# sql entity-framework asp.net-identity asp.net-core

11
推荐指数
2
解决办法
2万
查看次数

StackExchange Redis 超时以及如何在 .NET Core 中设置最小线程池数量?

当我尝试从突然出现在我的生产环境中的 azure redis 缓存中查询一个非常简单的字符串(我的应用程序日志级别)时,出现以下错误(此查询经常发生):

无法从 Redis 缓存反序列化日志级别:执行 GET 超时(5000 毫秒),下一步:GET LoggingLevel:ApplicationAPI,inst:2,qu:0,qs:1289,aw:False,rs:ReadAsync,ws:空闲,in:130355, serverEndpoint: XXXX mgr: 10 of 10 available, clientName: application-api-67cdbb4cfd-lkqdk, IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=3515,Free=29252 ,Min=1,Max=32767), v: 2.0.601.3402 (请查看这篇文章,了解一些可能导致超时的常见客户端问题: https ://stackexchange.github.io/StackExchange.Redis/Timeouts )

我已阅读他们建议的主题,还阅读了如何对 Azure Cache for Redi 进行故障排除

根据我在 Azure 仪表板中阅读的指标,我认为我没有超出当前的内存或连接限制。这似乎与我在线程池中设置的工作线程数有关。我读到我应该:

“将 IOCP 和 WORKER 线程的最小配置值设置为大于默认值”

我还了解到我可以使用 .NET Core 中的 api 设置最小线程数ThreadPool.SetMinThreads(Int32, Int32)

所以基本上我的问题是:

  1. 在 AKS 群集中运行应用程序时设置最小线程池是否安全?
  2. 我应该在哪里设置这个值?在 Program.cs 中?在 Startup.cs 中?
  3. 根据我上面看到的日志,将我的最低级别设置为 4000 是否安全?那么我是否高于工作线程的繁忙阈值?

multithreading caching azure redis asp.net-core

11
推荐指数
1
解决办法
8906
查看次数

HTML选择框显示在chrome中的windows任务栏下方

我正在尝试使用select标签添加html下拉列表,不幸的是在chrome中我无法选择选项5和6,因为它们显示在Windows上的chrome任务栏下方.如果我添加选项7然后突然显示上面而不是下面的列表. 在此输入图像描述

此列表将始终更改大小,因此不幸的是,将列表放在更高位置将不是一个选项,因为总有可能隐藏2个选项.此外,列表中显示的项目数是在添加滚动条之前是浏览器特定的.查看HTML选择框的高度(下拉列表)

到目前为止我尝试过的:

  • 当使用jquery和设置列表大小超过4个选项时,尝试将下拉列表转换为静态列表.然而这非常难看.
  • 尝试使用bootstraps .dropup类但不幸的是这只适用于列表项而不是选择选项
  • 不同的css hacks但是如前所述,列表大小是浏览器特定的.

我宁愿不添加任何外部库,并找到一些简单的Jquery黑客来解决这个问题.您还可以通过访问此jsfiddle链接并将显示窗口拖动到屏幕底部来查看我的意思:

  <div class="form-group">
  <label for="sel1">Select list:</label>
  <select class="form-control" id="sel1">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
     <option>6</option>
  </select>
</div>
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/v9t4rm16/

html javascript css jquery google-chrome

9
推荐指数
1
解决办法
1004
查看次数

防止html输入type = number永远为空

我知道HTML 5允许输入类型number,它只允许用户输入数字类型的输入.当我的页面加载时,我将默认输入设置为0,但用户可以删除此值,以便在用户点击提交时提交空白输入(null)?有没有办法让用户删除输入中的所有数字时,默认值为0?我这里不是在谈论验证.

试图避免一个丑陋的JS黑客,但如果这是唯一的方式,那么我想我将不得不走那条路.

html html5 input

9
推荐指数
2
解决办法
1万
查看次数

如何在同一个域但不同的主机上共享本地存储令牌?

项目1:MVC应用程序:

所以我有一个常规的.Net Core MVC应用程序,当用户导航到托管在端口3000上的myDomain.com时,用户可以登陆.我在这里使用常规控制器和剃刀视图等.在此应用程序中,用户可以登录指向JWT令牌将被返回并存储在本地存储中.它们还将导航到用户门户(托管在端口3001上).此MVC应用程序还将包含用于我的用户门户的API控制器

项目2:SPA应用程序(用户门户):

用户门户基本上是一个单独的客户端SPA项目,使用react将托管在端口3001上,端口3001具有自己的单独节点js服务器并在端口3000上调用MVC项目API.

所以我的问题是如何在这两个端口上保留我的登录令牌?这甚至可能吗?这种架构是否有意义?您可以提供有关此主题的任何读物,我们将不胜感激.

.net architecture single-page-application asp.net-core

5
推荐指数
1
解决办法
689
查看次数

在 .Net Framework 遗留应用程序中使用会话 cookie 和/或 JWT 持有者令牌进行身份验证

我目前正在使用微服务将现有的 ASP.NET MVC Monolithic 应用程序迁移到 .NET Core。现在,此迁移的一部分涉及将 Identity Server 4 与外部身份提供商结合使用。迁移使用的是扼杀者模式,因为我们正在慢慢地迁移出旧系统,而不是立即完成整个迁移。因此,我们必须支持使用基于 cookie 的会话身份验证的遗留系统以及使用 JWT 不记名令牌的新微服务 api。

目前我正在探索支持两种类型身份验证的最简单方法,直到迁移 100% 完成。Web 应用程序很好,因为它仍然使用 razor 页面和服务器端身份验证,因此可以轻松建立会话,并传回我的令牌以进行 api 身份验证。我的移动客户端是问题所在,它是使用离子和以前使用的服务器端会话身份验证构建的(在我之前......)。现在,我将 OpenID Connect 协议与外部 ISP 一起使用,我的所有身份验证流程都在移动客户端上处理,因此不会创建会话。

选项 1: 严格使用我的 JWT 持有者令牌在我的移动应用程序上进行身份验证,并以某种方式配置我的 MVC 控制器,以便能够使用 JWT 身份验证(如果它存在于标头中)或 Cookie 身份验证(如果请求中存在 cookie)(旧版 Web应用程序)。我不确定是否需要创建自定义中间件来完成此操作,或者是否有一种方法可以在启动时配置某些内容而无需创建中间件,并且控制器 [authorize] 属性只会知道使用 cookie 或不记名身份验证。我发现一篇文章解释说这在 Core 上是可能的,但尚未找到与 .NET 框架相关的任何内容。

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
           //configuration goes here
        });

        app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
        {
           //configuration goes here    
        }
Run Code Online (Sandbox Code Playgroud)

选项 2: 在我的旧应用程序服务器中创建一个新端点,并让我的移动客户端将我收到的不记名令牌传递到该端点以建立会话。现在,我的移动客户端可以在每个请求中传递 cookie 和不记名 JWT 令牌,并让服务器决定如何验证。这显然增加了一点复杂性,因为现在我正在维护 cookie 和令牌过期等,但这只会持续到迁移结束。

选项3: ???

问题: 我花了很多时间研究这两个选项的有效性,并且大多只获得与 .NET …

asp.net-mvc oauth-2.0 asp.net-identity openid-connect identityserver4

5
推荐指数
1
解决办法
5328
查看次数

是否有一种声明式方式在 kuberenetes 集群中安装 helm 图表

我只是想知道是否有人找到了一种声明性方法来安装/配置舵图作为集群启动的一部分,并且可以将其签入源代码管理。使用 Kuberenetes,我已经非常习惯“一切皆代码”类型的工作流程,并且我意识到安装和配置 helm 主要基于通过 CLI 的命令式工作流程。

我问的原因是因为目前我们的集群正在开发中,并将在生产中重新创建它。我们的大部分配置都是通过deployment.yaml 文件以声明方式完成的。然而,我们花费了大量的时间来安装和配置某些 Helm Chart(例如 Prometheus、Grafana 等)。

kubernetes kubectl kubernetes-helm azure-aks

5
推荐指数
1
解决办法
1543
查看次数

DDD 使用 NoSQL 处理有界上下文内多个聚合的最终一致性

我目前正在开发一款 DDD 地理定位应用程序,该应用程序在一个有界上下文中具有两个单独的聚合根。由于频繁的坐标更新,我使用 Redis 来保存不允许回滚的数据。

  1. 我的第一个聚合根是一个行程对象,其中包含司机(用户)、乘客(用户列表)等。
  2. 我的第二个聚合根是用户位置更新

当发送坐标更新时,我将生成并触发“UpdateUserPostionEvent”。作为副作用,我还将在某个点生成并触发“UpdateTripEvent”,这将更新驾驶员/乘客的坐标。

我的问题是,如果我异步触发“UpdateLiveTripEvent”,如何处理最终一致性。我的 UpdateLiveTripEventHandler 有几个故障点,除了记录错误之外,我该如何处理这种不一致?

我正在使用一个名为MediatR 的库和 INotificationHandler 据我所知是“Fire and Forget”

编辑:最终找到了这篇 SO帖子,它准确地描述了我需要的内容(saga/流程管理器),但不幸的是我无法找到任何类型的 Saga 实现来处理同一 BC 内的事件。我看到的所有例子都涉及服务总线。

events domain-driven-design event-handling mediator redis

4
推荐指数
1
解决办法
1700
查看次数

无法使用 SQL 管理凭据查询 Azure Synapse 中的无服务器池视图

我已在 Azure Synapse 中设置了一个无服务器 SQL 池,该池正在查询我为链接的 Azure Data Lake 设置的视图。

CREATE VIEW DeviceTelemetryView
AS SELECT corporationid, deviceid, version, Convert(datetime, dateTimestamp, 126) AS dateTimeStamp, deviceData FROM
   OPENROWSET(
       BULK 'https://test123.dfs.core.windows.net/devicetelemetry/*/*/*/*/*/',
       FORMAT = 'PARQUET'
    ) AS [result]
GO
Run Code Online (Sandbox Code Playgroud)

使用 synapse studio 或 SSMS 中的 Azure AD 凭据查询此视图没有任何问题。当我尝试使用 SQL 管理员帐户进行查询时,出现以下错误:

找不到凭据“https://test123.dfs.core.windows.net/devicetelemetry/////*/ ” ,因为它存在或您没有权限。

重要的是,我能够使用 SQL 管理凭据进行查询,因为我们希望通过应用程序查询此视图以获取各种报告,因此不想使用 AAD 凭据。

我已经尝试过这里提供的SO解决方案:GRANT Database Scoped Credential语法给出不匹配的输入错误

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[WorkspaceSystemIdentity] TO [sqlAdmin];
Run Code Online (Sandbox Code Playgroud)

由于这似乎是在将我的 DataLake 链接到 Synapse 时创建的默认凭据,但是在针对我的视图所在的数据库运行时,这会给我带来以下错误:

找不到数据库范围的凭据“WorkspaceSystemIdentity”,因为它不存在或您没有权限。

azure-sql-server azure-managed-identity azure-data-lake-gen2 azure-synapse

4
推荐指数
1
解决办法
2921
查看次数

Google Cloud Platform存储错误:尝试访问我的存储项目时出现“锁定域已过期”

我目前在Google Cloud Platform存储桶中为我的网站托管一些静态.css,.js,.tff和图像资源。上传资源后,我最多可以访问这些资源约20分钟。大约20分钟后,当我尝试访问它们时收到401错误消息,内容为:

{“错误”:{“错误”:[{“域”:“全局”,“原因”:“ lockedDomainExpired”,“消息”:“锁定域已过期”}],“代码”:401,“消息”: “锁定域已过期”}}

从GCP网站:

LockedDomainExpired:例如,使用存储浏览器从经过cookie验证的站点下载内容时,响应将重定向到一个临时域。如果在域到期后发生对所述域的访问,则会发生此错误。再次发出原始请求,并接收新的重定向。

我不确定在尝试使用GCP存储桶的情况下这意味着什么?任何帮助或资源将不胜感激。

google-app-engine cdn google-cloud-storage google-cloud-platform

2
推荐指数
1
解决办法
2500
查看次数

EF 核心代码优先迁移自动为表添加 db_owner 前缀

我目前正在使用 EF Core 2.1 代码优先迁移来创建 SQL Server 架构。当我使用以下命令在 SQL Server 中创建/更新表时”

dotnet ef database update
Run Code Online (Sandbox Code Playgroud)

它在我的表前面加上“db_owner”前缀。例如“db_owner.drivers”。

有没有办法在代码中从我的 ef 配置文件设置数据库前缀名称?或者这是 SQL Server 本身实际配置的东西?

sql sql-server entity-framework entity-framework-core asp.net-core

2
推荐指数
1
解决办法
1453
查看次数

在 EF Core 多对多关系中创建直接导航属性

我一直在研究以下关于如何使用 Entity Framework Core 创建多对多关系的教程: https: //learn.microsoft.com/en-us/ef/core/modeling/relationships

我正在开发组管理功能,我的模型如下:

public class Group
{
    public int GroupId { get; set; }
    public string GroupName { get; set;}            
    public virtual List<GroupMember> GroupMembers { get; set; } = new List<GroupMember>();
}

public class GroupMember
{
    public int GroupId { get; set; }
    public Group Group { get; set; }

    public int UserId { get; set; }
    public User User{ get; set; } 
}

public class User
{
    public int UserId { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework entity-framework-core asp.net-core

0
推荐指数
1
解决办法
5723
查看次数