小编pba*_*nis的帖子

在Azure Web角色上部署PDB

我有一个通过VS 2012 Azure项目部署的项目(从VS的右侧,而不是手动).Web角色项目设置为在发布模式下构建"仅pdb"调试信息,但是部署PDB时未打包并复制到Azure上的Web角色VM.如何让PDB包含在包中并传输到服务器?

我想在生产中包含我的PDB的原因是因为我想在我的ELMAH报告中获取行号.

elmah azure azure-web-roles azure-packaging

18
推荐指数
1
解决办法
1303
查看次数

从LINQ迁移到SQL到Entity Framework 4.0 - 提示,文档等

我在.NET 3.5 SP1中尝试了EF,我是众多感到沮丧的人之一,并决定学习LINQ to SQL.现在我知道EF是"选择"的前进路径,加上EF 4.0有一些令人兴奋的新功能,我想将我的应用程序迁移到EF 4.0.

任何人都可以建议任何专门针对4.0 L2S迁移的良好资源吗?注意:我可以在.NET 3.5上找到大量与从L2S迁移到EF相关的博客和文章,但我觉得其中很多很明显过时并且对使用4.0的人没有帮助.

我真的很喜欢我能得到的那么深的,引擎盖下的东西; 我想真的离开,感觉我知道 EF 4.0我目前知道L2S 3.5的方式.

TIA!

entity-framework .net-4.0 linq-to-sql entity-framework-4

17
推荐指数
1
解决办法
6331
查看次数

如何阻止 EF Core 索引所有外键

正如Entity Framework Indexing ALL foreign key columns 等问题中所述,EF Core 似乎自动为每个外键生成一个索引。这对我来说是一个合理的默认值(让我们不要在这里进行意见战......),但在某些情况下,这只是浪费空间并减慢插入和更新的速度。我如何根据具体情况预防它?

我不想完全关闭它,因为它利大于弊;我不希望有手动进行配置,所有这些指标我想。我只是想在特定的FK上阻止它。

相关的问题:EF 文档中的任何地方都提到了自动创建这些索引的事实吗?我在任何地方都找不到它,这可能是我找不到如何禁用它的原因?

有人肯定会质疑我为什么要这样做......所以为了节省时间,链接问题的操作员在评论中给出了一个很好的例子:

例如,我们有一张People桌子和一张Addresses桌子。该 People.AddressIDFK是由EF索引,但我只从开始 People行和搜索Addresses记录; 我从来没有找到 Addresses一行然后在该People.AddressID列中搜索匹配的记录。

entity-framework ef-core-2.0

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

实体框架查询 - 以特定顺序获取对象

我有一个List,用于指定数据库中多个对象的ID.我想从一个表中获取具有这些ID的对象集,并按照确切的顺序保存它们,并且我希望它作为针对DB的一个查询(而不是"N"查询)执行.

例如,我有一个ID列表{5,3,6,9},我希望返回一个带有这些ID的Customer对象列表,并按顺序{Customer(5,'Bob'),Customer( 3,'JimBo'),客户(6,'Joe'),客户(9,'Jack')}.

数据量足够小,我不介意在数据库查询后重新排序.我可以在大约15行干净的代码中完成所有这些(包括手动重新排序),但我觉得应该有针对EF的单行或双行LINQ查询,这应该很容易做到这一点.

.net linq entity-framework

8
推荐指数
1
解决办法
2012
查看次数

Angular 6中的"let-"属性是什么?

ng-bootstrap 模态文档中,存在某种let-*属性的使用,这些属性似乎用于链接函数或事件以供以后使用.如果您查看示例顶部的(click)事件和let-c/ let-d属性,您可以了解它的作用.这似乎是Angular的一个功能,与此无关ng-bootstrap.

但是这叫什么呢?它有什么作用?此功能的Angular文档在哪里?

这是我所指的一个例子.看到第一行.

<ng-template #content let-c="close" let-d="dismiss">
  <div class="modal-header">
    <h4 class="modal-title" id="modal-basic-title">Profile update</h4>
    <button type="button" class="close" aria-label="Close" (click)="d('Cross click')">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="modal-body">
    <!-- content here omitted -->
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-outline-dark" (click)="c('Save click')">Save</button>
  </div>
</ng-template>
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索这无济于事; 我得到的唯一结果是关于let使用时的关键字ngFor,这显然是无关的.

ng-bootstrap angular angular6

6
推荐指数
1
解决办法
7963
查看次数

实体框架 - 反思外键和关系/关联

我有一个具有挑战性的问题,我想在我的Entity Framework映射上使用反射来查找引用表的所有外键,并且我想要作为外键的列的名称.

根据SO上的另一篇文章,我可以通过反射轻松找到桌面上的导航属性.但是这不会给我包含外键值的属性或列的名称.

我试图这样做的原因是我有大量的表(近40个)引用一个项目表.假设用户在名为"Andew"的项目表中输入新值,稍后管理员注意到它实际上只是已经存在的项目"Andrew"的拼写错误.现在我想找到所有对"Andew"的引用并将这些引用更改为"Andrew".我更愿意这样做有效,因此使用反向导航属性会太慢,因为您必须在修改它们之前加载值.我想要做的是能够反映表和列的列表,然后直接向数据库发出更新命令.它看起来像这样:

var command = String.Format("UPDATE [{0}] SET [{1}] = {{1}} WHERE [{1}] = {{0}}; ", fk.FromTableName, fk.FromColumnName);
dataContext.ExecuteStoreCommand(command, new Object[] { oldID, newID });
Run Code Online (Sandbox Code Playgroud)

在LINQ to SQL中,这实际上非常简单......在LINQ自动生成的代码上有20行反射,我已经完成了,但是我们最近切换到了EF,我无法通过EF找到外键列的名称.

我正在寻找的一个简化示例:如果我有一个名为Employee的对象,其中包含一个名为Manager的导航属性和一个ManagerID的外键,那么我想知道Manager是我的导航属性,底层存储是ManagerID属性.我想通过反射或元数据严格执行此操作,以便我可以从中构建一个动态查询.

.net reflection entity-framework foreign-keys foreign-key-relationship

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

在特定位置插入子项的自定义 ViewGroup

我的 Android 应用程序中有几个具有相同基本结构的活动,我正在尝试使我的布局变干。重复的代码如下所示。它包含一个带有“返回”和“仪表板”链接的页脚的可滚动区域。还有一个 FrameLayout 用于在可滚动区域的顶部应用渐变。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="689px">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <!-- THE REAL PAGE CONTENT GOES HERE -->

            </LinearLayout>
        </ScrollView>
        <ImageView
            android:src="@drawable/GradientBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom" />
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="50px"
        android:background="?attr/primaryAccentColor">
        <Button
          android:layout_width="wrap_content"
          android:layout_height="26px"
          android:layout_gravity="center_vertical"
          local:MvxBind="Click GoBackCommand" />
        <Button
          android:layout_width="wrap_content"
          android:layout_height="26px"
          local:MvxBind="Click ShowDashboardHomeCommand" />
    </FrameLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

为了去重复我的活动,我认为我需要做的是创建一个从 LinearLayout 继承的自定义 ViewGroup。在该代码中,从 XML 文件加载上述内容。我迷路的是如何让活动中的子内容加载到正确的位置。例如,假设我的 Activity 现在包含:

<com.myapp.ScrollableVerticalLayoutWithDashboard
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- THE REAL PAGE CONTENT GOES HERE -->
    <TextView android:text"blah blah …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view viewgroup xamarin android-viewgroup

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

如何解析 EF Core 3 查询中的 int?

升级到 EF Core 3 后,我在以下代码中收到以下错误:

System.InvalidOperationException:“无法翻译 LINQ 表达式 'DbSet .Max(c => Convert.ToInt32(c.ClaimNumber.Substring(c.ClaimNumber.Length - 6)))”。以可翻译的形式重写查询,或者通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用来显式切换到客户端计算。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038

var maxId = Db.Claims
    .Select(c => c.ClaimNumber.Substring(c.ClaimNumber.Length - 6))
    .Max(x => Convert.ToInt32(x));
Run Code Online (Sandbox Code Playgroud)

我还尝试使用 int.Parse 而不是 Convert.ToInt32,它会产生相同的错误。我理解错误消息。然而,让 SQL Server 使用 CAST 或 CONVERT 将字符串解析为 T-SQL 中的 int 是微不足道的,我希望有一种简单的方法来编写查询,以便将其转换为服务器端操作,对吧?

更新在克劳迪奥的出色回答之后,我想我应该为下一个出现的人添加一些信息。我认为解析是上述代码的问题的原因是因为以下代码运行没有错误并产生正确的结果:

var maxId = Db.Claims
    .Select(c => c.ClaimNumber.Substring(c.ClaimNumber.Length - 6))
    .AsEnumerable()
    .Max(x => int.Parse(x));
Run Code Online (Sandbox Code Playgroud)

然而,我更深入地挖掘,发现这是 EF 从该代码执行的 SQL 查询:

SELECT [c].[ClaimNumber], CAST(LEN([c].[ClaimNumber]) AS int) - 6
FROM [Claims] AS [c]
WHERE [c].[ClaimNumber] …
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-core ef-core-3.0 ef-core-3.1

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

为什么 Chrome 将 input[type=submit] 视为只读?(不再工作)

在过去的几天里,我在 Chrome 中遇到了一个问题,表单上的提交按钮不再可点击。我有以下 HTML:

<input type="submit" value="Save" />
Run Code Online (Sandbox Code Playgroud)

而且,事实证明,以下 SASS 意外地影响了按钮,导致它们不再工作:

input:read-only {
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?我正在运行 Chrome“版本 92.0.4515.107(官方版本)(64 位)”。这是怎么回事?

google-chrome

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

在 ASP.NET Core 的 Application Insights 中填充用户 ID 字段

我希望能够使用我的真实用户名数据填充 Application Insights 中的用户 ID 字段。这是一个内部应用程序,因此对简单用户名字段的隐私问题没有实际意义。

据我所知,所有在线可用的解决方案都严格适用于 .NET Framework,而不是 .NET Core。

您可以在几个地方找到此解决方案,包括 GitHub 上的一些旧 AI 文档。但是,当我运行它时,我在启动时收到一个错误,表明单例不能接受对作用域对象 IHttpContextAccessor 的依赖,这当然是合乎逻辑的。除非 .NET Core 的 DI 的先前版本允许(我使用的是 2.2),否则我看不出这是如何工作的。

GitHub 上的这个 issue有点说明了问题,但在 AI 团队指出你必须使用单例后,它被关闭了。我尝试了 OP 中的内容和第一个响应的变体,当代码运行时,AI 上的用户 ID 字段继续充满乱码数据。

有没有办法让 AI 中的 User Id 字段填充一些对来自 ASP.NET Core 应用程序的服务器请求有用的东西?

编辑

在看到下面的答案后,我的代码应该可以正常工作,我回过头来意识到异常消息没有特别提到 IHttpContextAccessor:

System.InvalidOperationException: '不能从单例'Microsoft.Extensions.Options.IConfigureOptions`1[Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration]'使用范围服务'Microsoft.ApplicationInsights.Extensibility.ITelemetryInitializer'。'

现在,我的代码看起来与下面@PeterBons 的答案几乎相同,因此从表面上看,此异常毫无意义。 TelemetryConfiguration没有事件出现在我的代码中。但后来我想起我正在使用 Scrutor 在 Startup 中懒惰地进行 DI 注册:

    services.Scan(scan => scan
        .FromAssembliesOf(typeof(Startup), typeof(MyDbContext))
        .AddClasses()
        .AsSelfWithInterfaces().WithScopedLifetime());
Run Code Online (Sandbox Code Playgroud)

我认为问题是我需要将我的 ITelemetryInitializer 注册为 Singleton,而这段代码无意中将其取消或重新注册为作用域。所以我把最后两行改为:

        .AddClasses(f => f.Where(t => t != typeof(RealUserAIProvider)))
        .AsSelfWithInterfaces().WithScopedLifetime()); …
Run Code Online (Sandbox Code Playgroud)

azure-application-insights asp.net-core asp.net-core-2.2 scrutor

3
推荐指数
1
解决办法
1299
查看次数

VS 2022 样式规则将自动实现的属性保留在一行上

当我在 VS 2022 中剪切并粘贴以下 C# 文本时:

public int? Units { get; set; }
Run Code Online (Sandbox Code Playgroud)

它将其粘贴格式为:

public int? Units
{
    get; set;
}
Run Code Online (Sandbox Code Playgroud)

需要调整什么 .editorconfig 规则来告诉 VS 我希望我的自动实现的属性保留在一行上?

另外,对于衷心的奖励积分(但没有实际积分),有没有一个好的方法可以让我自己找到这些信息?我用谷歌搜索这个直到我的眼睛流血,并且我尽可能长时间地搜索“选项”->“文本编辑器”->“C#”->“代码样式”下的选项,但没有运气。

c# editorconfig visual-studio-2022

3
推荐指数
1
解决办法
826
查看次数

只授权ASP.NET Core中的某些Http方法

我想对控制器上的所有操作都要求一个策略,并且对HTTP“编辑方法”(POST,PUT,PATCH和DELETE)的所有调用都需要第二个策略。也就是说,编辑方法应同时要求两个策略。由于实现要求,以及保持代码DRY的愿望,我需要将后者策略应用于控制器级别,而不是在所有操作方法上都重复使用。

举一个简单的例子,我有一个PeopleController,我也有两个许可权,分别实现为Policy ViewPeopleEditPeople。现在我有:

[Authorize("ViewPeople")]
public class PeopleController : Controller { }
Run Code Online (Sandbox Code Playgroud)

如何添加EditPeople策略/权限,使其“堆叠”且仅适用于编辑动词?

我遇到了两个似乎都是很痛苦的问题:

  • 您不能在AuthorizeAttribute AFAIK中指定一个以上的AuthorizeAttribute或一个以上的策略。
  • 您无法在自定义AuthorizationHandler中访问该请求,因此我无法检查HttpMethod进行检查。

我尝试使用自定义Requirement和AuthorizationHandler解决前者,如下所示:

public class ViewEditRolesRequirement : IAuthorizationRequirement
{
    public ViewEditRolesRequirement(Roles[] editRoles, Roles[] viewRoles)
        => (EditRoles, ViewRoles) = (editRoles, viewRoles);

    public Roles[] EditRoles { get; }
    public Roles[] ViewRoles { get; }
}

public class ViewEditRolesHandler : AuthorizationHandler<ViewEditRolesRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ViewEditRolesRequirement requirement)
    {
        if (context.User != null)
        {
            var canView = requirement.ViewRoles.Any(r => context.User.IsInRole(r.ToString()));
            var …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-authorization asp.net-core asp.net-core-identity

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