小编Mar*_*ers的帖子

DbEntityValidationException - 如何轻松判断导致错误的原因?

我有一个使用Entity Framework的项目.在调用SaveChangesmy时DbContext,我得到以下异常:

System.Data.Entity.Validation.DbEntityValidationException:一个或多个实体的验证失败.有关详细信息,请参阅"EntityValidationErrors"属性.

这一切都很好,但每次发生此异常时我都不想附加调试器.此外,在生产环境中,我无法轻松附加调试器,因此我不得不竭尽全力重现这些错误.

我怎样才能看到隐藏在其中的细节DbEntityValidationException

c# entity-framework

216
推荐指数
7
解决办法
18万
查看次数

基于ASP.NET WebAPI控件生成JS客户端

在使用RESTful API的现代Web项目中,我们经常会看到AJAX调用,就像下面的JavaScript文件一样.

$.ajax({
    type: "POST",
    url: myapp.baseUrl + 'Api/Note',
    data: ko.mapping.toJSON(note),
    contentType: 'application/json',
}).done(function (response) {
    // do something
}).fail(function (jqxhr) {
    // do something else
});
Run Code Online (Sandbox Code Playgroud)

我喜欢WebAPI,我喜欢Knockout,我喜欢将两者结合在一起.然而,这些AJAX调用非常冗长,包含了我并不感兴趣的各种细节.相反,我创建了一个围绕这些方法的包装器:

myapp.api.saveNote(note)
Run Code Online (Sandbox Code Playgroud)

但是,这仍然需要我实际编写一个包含AJAX调用的包装器.我想知道你是否真的可以生成这些包装器.本质上,我将为我的WebAPI生成一个基于JS的客户端,类似于Java和.NET如何基于WSDL生成客户端.

  1. 以前做过吗?
  2. 有没有其他方法可以将ASP.NET WebAPI和JavaScript结合在一起,而无需编写大量的AJAX样板代码?
  3. 换句话说,是否存在基于ASP.NET WebAPI等服务器端接口创建JS接口的框架?

我已经看过amplifyJS,但这只能部分地解决问题.我正在寻找一种解决方案,它实际上在我的解决方案中基于WebAPI控制器创建了一个接口.如果这不存在,我会开始修补自己.我已经有了一个想法,WebAPIClientGenerator它使用反射迭代所有ApiController的.

javascript asp.net rest proxy-classes asp.net-web-api

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

Mockito 为通用 @BeforeEach 设置方法中定义的存根抛出 UnnecessaryStubbingException

我有一个单元测试类,其中我的被测单元依赖于另一个类。使用 Mockito 模拟依赖关系,然后使用 JUnit 的@BeforeEach注释使用在每个单元测试之前运行的通用存根进行设置。请参阅下面的伪代码。

@ExtendWith(MockitoExtension.class)
public class FooFactoryTest {

    @Mock
    private BarDependency barDependency;

    @InjectMocks
    private FooFactory unitUnderTest;

    @BeforeEach
    public void setup() {
        when(barDependency.leftBar(any())).thenReturn(new Bar());
        when(barDependency.rightBar(any())).thenReturn(new Bar());
    }

   ... many tests ...

Run Code Online (Sandbox Code Playgroud)

此设置非常适合我的 10 个单元测试中的 9 个。不幸的是,我的一项测试失败并出现以下错误:

org.mockito.exceptions.misusing.UnnecessaryStubbingException: 
Unnecessary stubbings detected.
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
  1. -> at nl.devillers.mockito.FooFactoryTest.setup(FooFactoryTest.java:69)
Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing mockito junit-jupiter

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

如何旋转material-ui图标

我正在尝试使用 css 属性旋转 Material-ui 图标animation,但没有得到所需的结果。有人可以帮我确定这里出了什么问题吗?

https://codesandbox.io/s/nifty-nightingale-v8sqh?file=/App.tsx

我的期望是一个连续旋转的图标。

css-animations typescript reactjs material-ui react-hooks

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

Moq和Interop类型:在VS2012中工作,在VS2010中失败?

我有一个.NET库项目,大约有500个单元测试.所有这些测试在Visual Studio 2012中运行良好.但是,我的一些测试在Visual Studio 2010中失败.在这些失败的测试中,我使用Moq来模拟几个Interop类型Microsoft.Office.Interop.Excel.尝试访问这些模拟的互操作类型时,测试立即失败:

Error: Missing method 'instance class Microsoft.Office.Interop.Excel.Range [ExcelAddIn.Core] Microsoft.Office.Interop.Excel.ListRow::get_Range()' from class 'Castle.Proxies.ListRowProxy'.
Run Code Online (Sandbox Code Playgroud)

这个异常意味着我忘了在mock上设置适当的属性getter.事实并非如此:

_listRowMock.Setup(m => m.Range).Returns(_rangeMock.Object);
Run Code Online (Sandbox Code Playgroud)

现在我可以想象Moq对于Interop类型可能效果不佳.但我发现最令人费解的是,这些测试在Visual Studio 2012中运行良好,但在Visual Studio 2010中失败.

为什么我的Visual Studio会影响我的代码行为?

更新:2012年3月11日

好的,所以我明白了:

  • 我有两个项目; Core和Core.UnitTest.Core是实际的库,而Core.UnitTest是Core库的单元测试项目.
  • 这两个项目都引用了Microsoft.Office.Interop.Excel并启用了嵌入互操作类型.
  • 由于启用了EIT,因此两个项目都包含自己的Microsoft.Office.Interop.Excel库"视图".该视图包括其各自项目中使用的所有类,方法和属性.
  • 由于两个项目都使用Microsoft.Office.Interop.Excel的不同类,方法和属性,因此两个库的嵌入类型不同.例如,Core中的ListRow具有Index和Range属性,而Core.UnitTest中的ListRow仅具有Range属性.
  • 虽然两种类型都不同,并且不共享公共接口或超类,但它们是等效的.这意味着CLR会将它们视为相同,并允许您跨程序集边界使用这些类型.例如,Core.UnitTest中的ListRow实例在传递给Core库中的方法时可以正常工作.共享的Range属性将起作用,而缺少的Index属性将在访问时抛出MissingMethodException.
  • 上述行为甚至适用于模拟类型.Mock [Excel.ListRow]的模拟对象在跨越装配边界时可以正常工作.
  • 不幸的是,前一点中描述的行为仅在我在Visual Studio 2012中构建程序集时才有效.当我在Visual Studio 2010中构建程序集并调试我的代码时,我可以看到模拟的ListRow实例被传递到我的Core项目的方法中.实例越过程序集边界的那一刻,ListRow的所有方法和属性都会丢失它们的实现并抛出MissingMethodExceptions.
  • 现在,对于有趣的部分,我实际上通过确保两个嵌入类型的ListRow对齐来设法缓解此问题.例如,为了让编译器在两个项目中创建相同的ListRow视图,我确保在UnitTest项目中使用了完全相同的方法和属性.这意味着添加虚拟行,如:var dummy = listRow.Index.一旦我让编译器创建了我的嵌入式ListRow类型的相同视图,就允许该实例跨越程序集边界而不会丢失其实现.

问题仍然存在:是什么导致Visual Studio 2010和Visual Studio 2012之间的行为差​​异?

更新:2012年9月11日

演示解决方案:http://temp-share.com/show/KdPf6066h

我已经创建了一个小解决方案来演示效果.该解决方案由一个库和一个UnitTest项目组成.两者都引用了Microsoft.Office.Interop.Excel.Range并启用了EIT.该测试在VS2012中正常工作,但在VS2010中抛出MissingMethodException.在测试中取消注释虚拟线将使其在VS2010中工作.

最终更新:2012年12月29日

我为最新的更新道歉.我的一位同事找到了解决方案,但是我无法在我的机器上重现它.与此同时,我们公司已经转向TFS2012,因此这不再是我的阻塞问题.我的同事做出的两个最重要的结论是:

  • "Any CPU"平台的语义已从Visual Studio 2010更改为Visual Studio 2012.这将导致生成不同的.DLL,具体取决于您使用的是VS2010还是VS2012.
  • 这两个项目都引用了Microsoft.Office.Interop.Excel的不同版本.

我检查了我的项目并理顺了参考文献,但没有任何区别.之后,我在VS2010和VS2012中尝试了不同的平台变体,但无法产生令人满意的结果.我会接受杰里米的回答,因为这是最有帮助的.谢谢大家的帮助.

c# moq visual-studio-2010 excel-interop visual-studio-2012

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

为什么我的区域特定Web API可以从所有其他区域访问?

我目前正在开发一个ASP.NET MVC 4 Web应用程序项目,该项目必须遵循以下设计决策:

  • 主MVC应用程序驻留在解决方案的根目录中.
  • 所有管理员功能都位于单独的区域中.
  • 每个外部方(例如供应商)都有自己的区域.
  • 每个区域,包括根,构成一个分离良好的功能块.来自一个区域的功能可能不会暴露给另一个区域.这是为了防止未经授权的数据访问.
  • 每个区域(包括root)都有自己的RESTfull API(Web API).

所有区域中的所有普通控制器(包括根)都按预期工作.但是,我的一些Web API控制器出现意外行为.例如,有两个具有相同名称但位于不同区域的Web API控制器会产生以下异常:

找到了多个匹配名为"clients"的控制器的类型.如果为此请求提供服务的路由('api/{controller}/{id}')发现多个控制器定义了相同名称但名称不同的命名空间(不受支持),则会发生这种情况.

对'clients'的请求找到了以下匹配的控制器:MvcApplication.Areas.Administration.Controllers.Api.ClientsController MvcApplication.Controllers.Api.ClientsController

这看起来很奇怪,因为我有不同的路线,应该将两者分开.这是我的管理部门的区域注册:

public class AdministrationAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Administration";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.Routes.MapHttpRoute(
            name: "Administration_DefaultApi",
            routeTemplate: "Administration/api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        context.MapRoute(
            "Administration_default",
            "Administration/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,我注意到我可以访问区域特定的Web API,同时省略呼叫区域的名称.

这里发生了什么?如何让我的Web API控制器像普通的ASP.NET MVC控制器一样运行?

.net c# asp.net-mvc asp.net-mvc-areas asp.net-web-api

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

Button 组件上忽略隐藏属性

我试图Button通过添加hidden属性来隐藏 Material-UI 组件,但该属性似乎被忽略了。我已经hidden在其他 Material-UI 组件上使用了该属性,例如TypographyGrid并且Box它工作正常。下面是我的代码的简化片段。单击此处在 CodeSandbox 上试用。

<Typography hidden={loading}>
  Works. This text is not displayed when `loading` is truthy.
</Typography>
<Button hidden={loading}>
  Doesn't work. This Button is still there!
</Button >
Run Code Online (Sandbox Code Playgroud)

html javascript reactjs material-ui

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

如何使Bootstrap popover在单独的元素中使用HTML内容

我正在将Bootstrap面板与Bootstrap popover功能结合起来.目标是在用户悬停面板标题时显示弹出窗口.我已经有了这个工作,除了data-content=""当它内部有很多HTML时,该部分变得非常难以管理.

下面是我正在使用的一些示例HTML."LOADS OF HTML"部分包含div,table,p等.

<div class="panel panel-default">
    <div class="panel-heading">
        <i class="fa fa-briefcase fa-fw"></i> 
        <abbr title="Panel title" data-container="body" data-toggle="popover" 
              data-placement="bottom" data-trigger="hover" data-html="true" 
              data-content="<div>LOADS OF HTML HERE</div>">
          Panel title
        </abbr>
        <div class="col-xs-6 col-md-4 pull-right" style="margin-top: -4px;">
            <!-- some buttons go here -->
        </div>
    </div>
    <!-- /.panel-heading -->
    </div>
    <!-- some panel content goes here -->
</div>
Run Code Online (Sandbox Code Playgroud)

其他Bootstrap插件通过允许您将HTML放在单独的元素中然后使用"data-target"属性引用该元素来解决此问题.不幸的是,Popover不支持这一点.如何在不编写特定于元素的JavaScript的情况下模仿此行为?

html javascript jquery popover twitter-bootstrap

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

Pattern.asMatchPredicate 和 Pattern.asPredicate 之间的区别

Java 11 向Pattern类(正则表达式的编译版本)添加了一些新方法,包括:

我想了解两者之间的区别以及何时想使用其中一种而不是另一种?

java regex java-11

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

NEWSEQUENTIALID有多可预测?

根据微软的文档NEWSEQUENTIALID,NEWSEQUENTIALID的输出是可预测的.但可预测的可预测性如何?假设我有一个生成的GUID,NEWSEQUENTIALID它有多难:

  • 计算下一个值?
  • 计算以前的值?
  • 计算第一个值?
  • 计算第一个值,即使根本不知道任何GUID?
  • 计算行数?例如,当使用整数时,/order?id=842告诉我应用程序中有842个订单.

以下是关于我正在做什么以及各种权衡取舍的背景信息.

使用GUID比整数作为主键的一个安全好处是GUID很难猜到.例如,黑客看到/user?id=845他可能尝试访问的URL /user?id=0,因为数据库中的第一个用户很可能是管理用户.此外,黑客可以迭代/user?id=0..1..2以快速收集所有用户.

同样,整数的隐私缺点是它们泄露信息./order?id=482告诉我,网上商店自实施以来已经有482个订单.

不幸的是,使用GUID作为主键具有众所周知的性能缺点.为此,SQL Server引入了该NEWSEQUENTIALID功能.在这个问题中,我想了解输出的可预测性NEWSEQUENTIALID.

sql sql-server guid primary-key newsequentialid

5
推荐指数
2
解决办法
1118
查看次数

MUI 选择器 + date-fns = TypeError: utils.getYearText 不是函数

我在一个新项目中使用Material-UI V4Material-UI 日期/时间选择器date-fns 。我的页面非常简单,我使用DateTimePickerMaterial UI 中的以下组件:

            <DateTimePicker
              label="Date and time"
              inputVariant="outlined"
              value={searchDateTime}
              disablePast
              onChange={handleSearchDateTimeChange}
              showTodayButton
              fullWidth
              disabled={isScanning}
            />
Run Code Online (Sandbox Code Playgroud)

单击日期选择器后,我的应用程序崩溃并出现以下错误:

类型错误:utils.getYearText 不是函数

我怎样才能解决这个问题?

版本来自package.json

    "@date-io/date-fns": "^2.11.0",
    "@material-ui/core": "^4.12.3",
    "@material-ui/icons": "^4.11.2",
    "@material-ui/pickers": "^3.3.10",
    "date-fns": "^2.26.0",
    "next": "10.0.5",
    "react": "17.0.2",
    "react-dom": "17.0.2",
Run Code Online (Sandbox Code Playgroud)

typescript reactjs material-ui next.js date-fns

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

在EmberJS的textarea中输入时,请勿键入换行符

我需要在Enter按下键时提交更改,而不是键入换行符号.我正在使用Ember.js和稍微定制的TextArea助手.

这是我在模板中的内容

{{edit-item placeholder="Weight" value=weight insert-newline="acceptChanges" focus-out="acceptChanges"}}
Run Code Online (Sandbox Code Playgroud)

在我的帮手

App.EditItemView = Em.TextArea.extend

  didInsertElement: ->
    this.$().focus()
    this.$().blur()

  focusIn: ->
    $this = this.$()
    $this.get(0).select()
    # fix webkit select problems
    mouseUpHandler = ->
        $this.off("mouseup", mouseUpHandler)
        return false
    $this.mouseup(mouseUpHandler)

  attributeBindings: ['style', 'placeholder']

Em.Handlebars.helper 'edit-item', App.EditItemView
Run Code Online (Sandbox Code Playgroud)

在我的acceptChagnges行动中

# In controller action hook up 
acceptChanges: ->
  $(document.activeElement).blur()
  @get('model').save()
Run Code Online (Sandbox Code Playgroud)

真正的问题是,当选择文本和用户类型输入要接受的键时,它还会键入换行符替换textarea中的所有内容,因此唯一的换行符将被接受.

如何防止键入新行,但触发事件接受更改?

javascript jquery ember.js

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

如何重置 Apollo Client 的 useMutation 钩子

我正在开发一个阵营目前正使用的绑在GraphQL突变形式useMutation阿波罗客户端。在服务器上,我执行一些验证,如果出现错误,我拒绝突变。在客户端,我使用error对象来接收验证错误。我的钩子看起来像这样:

const [addDrone, { error }] = useMutation(ADD_DRONE)
Run Code Online (Sandbox Code Playgroud)

因此,我将error对象解包并在对话框中将其呈现给用户,让他/她知道出了什么问题。在用户关闭对话框后,我想让用户有机会修复错误,以便他/她可以重新提交表单。这就是事情变得毛茸茸的地方。我想error在用户关闭对话框时清除对象,但由于这个变量来自useMutation钩子,我无法改变或重置它。看起来useMutation被设计为一次发射,不再使用。

所以我的问题是,有没有办法将useMutation钩子“重置”回它的原始状态?

apollo reactjs graphql react-apollo apollo-client

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