小编aro*_*eer的帖子

Dapper是否支持POCO中的c#6只读属性?

鉴于以下内容:

public class SomePoco {
    public int IntValue { get; }
}
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE SomePocoStorage (IntValue INT NOT NULL)
Run Code Online (Sandbox Code Playgroud)

INSERT SomePocoStorage VALUES (1), (274)
Run Code Online (Sandbox Code Playgroud)

如果我打电话

connection.Query<SomePoco>("SELECT * FROM SomePocoStorage")
Run Code Online (Sandbox Code Playgroud)

Dapper是否处理IntValue在返回的SomePoco实例上填充字段?

dapper c#-6.0

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

在Python中,如何从本地未导入的另一个文件中修补函数?

我正在学习 Pythonic 测试开发,偶然发现了这个看似违反直觉的问题。当我修补与被测代码在同一文件中定义的函数时,该函数patch可以正常工作。但是,当我使用import来自不同文件的函数时,patch正确工作的唯一方法是创建import本地函数,而不是在文件顶部定义它。

最小复制:

a/b.py:

from x.y import z


def c():
    print("In a.b.c")


class D:
    def do_stuff_with_a_b_c(self):
        print("In do_stuff_with_a_b_c")
        c()

    def do_stuff_with_x_y_z(self):
        from x.y import z
        print("In do_stuff_with_x_y_z")
        z()
Run Code Online (Sandbox Code Playgroud)

x/y.py:

def z():
    print("In x.y.z")
Run Code Online (Sandbox Code Playgroud)

测试/d_tests.py:

import inspect
import unittest
from unittest.mock import patch

from x import y
from a.b import D


class DTests(unittest.TestCase):
    def test_do_stuff_with_a_b_c(self):
        print(f"In {inspect.stack()[0][3]}")
        D().do_stuff_with_a_b_c()

    @patch("a.b.c")
    def test_do_stuff_with_patched_a_b_c(self, a_b_c_method):
        print(f"In {inspect.stack()[0][3]}")
        D().do_stuff_with_a_b_c()

    def test_do_stuff_with_x_y_z(self):
        print(f"In {inspect.stack()[0][3]}")
        D().do_stuff_with_x_y_z()

    @patch("x.y.z")
    def …
Run Code Online (Sandbox Code Playgroud)

python pytest

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

不能直接调用超类型构造函数 - 为什么不呢?

我在Java中有以下示例类:

public class A { }

public class Super {
    protected Super() { }
    public Super(A a) { }
}

public class Sub extends Super { }

public class Consumer {
    public Consumer() {
        Sub sub = new Sub(new A()); //compiler error
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器错误表明参数不能应用于Sub中的默认构造函数,这是完全可以理解的.

我很好奇的是这个决定背后的理由.Java生成默认的空构造函数Sub; 为什么不能在这种情况下在幕后调用呢?这主要是理智的手持,还是有技术原因?

编辑

我知道的是这是一个语言的限制.我很好奇为什么它是一种语言限制.

编辑2

看起来,通常情况下,我太过接近我实际工作的代码,看看大局.我在下面的答案中发布了一个反例,说明了为什么这是BadThing®.

java constructor

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

是否有任何现有的Java缓存外观?

我正准备开始在应用程序中开始性能,最终将分布式运行,但目前正处于[绿地]开发阶段.

我希望能够在没有选择或提交到特定库的情况下引入缓存,所以我想知道是否存在一个已经存在的缓存外观库(类似于slf4j用于日志记录),这将允许我在以后的日子.

java caching facade

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

确定当前正在进行的安全检查 (SQL Server)

我一直最讨厌 MS SQL Server 中的一件事就是安全性的工作方式。如果你有趣地看待服务器,安全上下文会不断切换,而且通常很难(无论如何对我来说)预测或调试。

在今天处理一个问题时,我想,“我希望我可以在代码中添加一行,以显示 SQL Server 在代码运行时使用的安全上下文。” 存在这样的命令吗?例如,SELECT security_context()

更清楚一点...如果我处于存储过程中并且因此受到 SP 所有者的安全上下文的约束,那么我希望看到这一点。如果我在由 sp_executesql 调用的代码中,并且它导致安全性处于 SQL Server 服务帐户的上下文中,那么我希望看到这一点。

至少这样我也许能够弄清楚为什么 SQL Server 认为我不应该访问某些内容。

谢谢!


例子

-- Set up
CREATE USER Test_User WITHOUT LOGIN
CREATE TABLE Test_Security_Context (my_id INT)
INSERT INTO Test_Security_Context VALUES (1)
DENY SELECT ON Test_Security_Context TO Test_User
GO
CREATE PROCEDURE Test_Security_Context_SP
AS
  SELECT SUSER_SNAME()
  SELECT * FROM Test_Security_Context  -- This will return ok
  EXEC('SELECT SUSER_SNAME(); SELECT * FROM Test_Security_Context')  -- SUSER_SNAME() will match above but select fails …
Run Code Online (Sandbox Code Playgroud)

sql-server security security-context sql-server-2008

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

SQL Server 2008 是否具有“库存”表参数类型?

SQL Server 2008 是否提供任何用于表值参数的预定义表类型?

例如,如果我只想将整数列表作为表传入,并从我传入的其他参数中派生出必要的上下文,是否有适合的类型,还是必须创建它?

sql-server-2008 table-valued-parameters

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

如何在Moq中设置重载的方法调用?

我正在尝试模拟映射接口IMapper

public interface IMapper<TFoo, TBar> {
    TBar Map(TFoo foo);
    TFoo Map(TBar bar);
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我将模拟映射器设置为期望每个都被调用(围绕NHibernate update操作):

//...
_mapperMock.Setup(m => m.Map(fooMock.Object)).Returns(barMock.Object);
_mapperMock.Setup(m => m.Map(barMock.Object)).Returns(fooMock.Object);
//...
Run Code Online (Sandbox Code Playgroud)

但是,在进行第二次Map调用时,映射器模拟程序将抛出异​​常,因为它只希望进行一次调用。

看着在运行时安装过程中的mapper模拟,我可以看到Map(TFoo foo)注册了过载,然后在设置Map(TBar bar)过载时看到了它的替换。

Moq处理设置的方式是否有问题,或者在这种情况下需要使用其他语法吗?

编辑 这是来自测试构造函数的实际实例化代码:

public class TestClass {
    private readonly MockRepository _repository = new MockRepository(MockBehavior.Strict);

    public TestClass() {
        //...
        _mapperMock = _repository.Create
            <IMapper<RequestData.Foo, ResponseData.Bar>>();
        //...
     }
}
Run Code Online (Sandbox Code Playgroud)

编辑2

这是一个完整的失败测试用例:

public interface IMapper<TFoo, TBar> {
    TFoo Map(TBar bar);
    TBar Map(TFoo foo);
}

public class Foo { …
Run Code Online (Sandbox Code Playgroud)

c# overloading moq

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

在过程级别禁用.Net JIT优化

我知道可以通过创建INI文件在程序集或可执行文件级别禁用.Net的JIT优化。

是否可以对流程中的所有程序集或可执行文件执行相同的操作?

我的特定用例是在IIS Express中运行的ASP.Net MVC应用程序中调试异常处理-我已经System.Web.Mvc.ini设置好文件,并且在为每个其他DLL写入文件之前,我认为我可能会输入文件,并且可能可能没有从GAC加载,我想问一问是否可以使用通用方法。

c# optimization jit

5
推荐指数
0
解决办法
1094
查看次数

没有赋值的隐式转换?

保留的问题 - 请参阅底部的编辑
我正在开发一个小型函数库,基本上是通过隐藏基本的圈复杂度来提供一些可读性.调用提供程序(调用Select<T>帮助程序工厂Select),用法类似于

public Guid? GetPropertyId(...)
{
    return Select
        .Either(TryToGetTheId(...))
        .Or(TrySomethingElseToGetTheId(...))
        .Or(IGuessWeCanTryThisTooIfWeReallyHaveTo(...))
        //etc.
        ;
}
Run Code Online (Sandbox Code Playgroud)

和库会照顾短路,等我还添加了从隐式转换Select<T>T的,所以我可以写

public Guid GetPropertyId(...)
{
    ServiceResult result = Select
        .Either(TryToGetTheId(...))
        .Or(TrySomethingElseToGetTheId(...));

    return result.Id;
}
Run Code Online (Sandbox Code Playgroud)

我真正希望能够做的是在没有赋值的情况下隐式转换为T:

public Guid GetPropertyId(...)
{
    return 
        //This is the part that I want to be implicitly cast to a ServiceResult
        Select
        .Either(TryToGetTheId(...))
        .Or(TrySomethingElseToGetTheId(...))
        //Then I want to access this property on the result of the cast
        .Id;
}
Run Code Online (Sandbox Code Playgroud)

但是,指定的语法不起作用 - 我必须将其分配给变量,或者显式地转换它.有没有办法获得内联隐式转换?

编辑 …

c# casting implicit

4
推荐指数
2
解决办法
1739
查看次数

我可以从 ac#9 记录的自动生成方法中隐藏敏感属性值吗?

我正在构建一个用户管理系统,其中包含一个向其发送命令的域主机。record由于init-only 属性和生成的辅助方法,这些命令都是s 。但是,我很快就遇到了这种方法的问题,例如LoginUserCommand.

command.ToString() 返回如下内容(添加格式):

LoginUserCommand { 
    Identity = 10000000-1111-2222-3333-444444444444,
    CorrelationId = 20000000-1111-2222-3333-444444444444,
    Timestamp = 2013-07-26T16:45:20Z,
    IssuingUserId = 30000000-1111-2222-3333-444444444444,
    EntityId = a80c081c-cf91-4304-9baa-20fb20c8d9f7,
    IPAddress = 127.0.0.1,
    Password = ThisIsAPr0blem
}
Run Code Online (Sandbox Code Playgroud)

显然,我可以通过例如覆盖重要ToString()的类来解决这个问题。天真地,我可能会做类似的事情

public override string ToString()
{
    return base.ToString()
        .Replace(Password, "********");
}
Run Code Online (Sandbox Code Playgroud)

但我想知道我是否忽略了一些让生成的ToString()方法屏蔽Password属性值的内置方法。

c# c#-9.0

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