小编kat*_*roh的帖子

MSTest和app.config问题

我试图通过MSTest和app.config的部署来自动运行单元测试.我阅读了多个帖子和博客,尝试了多项内容,但在MSTest执行期间,似乎仍然没有选择app.config.有一个包含我用msbuild构建的所有单元测试的dll,这是我试过的...

尝试1

  1. 将app.config复制到MyTests.dll作为MyTests.dll.config的同一位置(在其中一个msdn论坛上,它被称为自动拾取)
  2. [DeploymentItem("MyTests.dll.config")]为每个测试添加了属性
  3. MSTest.exe /noisolation /testcontainer:d:\MyTestTests.dll /test:MyTest

尝试2

  1. 创建具有以下内容的local.testrunco​​nfig文件(如下)
  2. 使用/ runco​​nfig执行mstest并且没有隔离,但没有执行任何操作: MSTest.exe /runconfig:d:\local.testrunconfig /testcontainer:d:\MyTestTests.dll /test:MyTest

结果: 正在加载d:\ local.testrunco​​nfig ...
d:\ local.testrunco​​nfig
d:\ local.testrunco​​nfig

......没有任何反应:没有错误,没有执行任何测试!


编辑/解决方案:默认情况下,MSTest在单独的进程中执行测试.在这种情况下,如果配置文件的名称类似于"dllname.dll.config",则会自动获取配置文件.但是,如果在VS之外运行,则很难调试在单独进程中运行的测试./ noisolation开关用于使MSTest在一个进程中运行所有测试.但是,在这种情况下,不会选择测试配置文件.而是使用MSTest.exe.config文件,该文件与MSTest位于同一目录中.要解决此问题,可以像下面这样实际加载配置文件:


ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = @"path to config file";
Configuration config = 
   ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
Run Code Online (Sandbox Code Playgroud)

c# msbuild mstest app-config

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

如何在没有事务的情况下初始化的SqlCommand/SqlConnection上设置隔离级别

以下方法应该在打开的连接上进行脏读.没有交易.我在哪里设置IsolationLevel?

public string DoDirtyRead(string storedProcName, SqlConnection connection)
{
    using (SqlCommand command = new SqlCommand(storedProcName, connection))
    {
        command.CommandType = CommandType.StoredProcedure;
        // HOW TO SET IsolationLevel to READ_UNCOMMITTED here?
        command.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sqlcommand isolation-level

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

IEnumerable <T> to Dictionary <string,IEnumerable <T >>使用LINQ

拥有IEnumerable<Order> orders,如何Dictionary<string, IEnumerable<Order>>使用Linq,其中密钥Order.CustomerName映射到IEnumerable客户的订单.

orders.ToDictionary(order => order.CustomerName) 不会马上工作,因为可能有多个订单可能具有相同的CustomerName.

解: orders.ToLookup(order => order.CustomerName);

c# linq .net-3.5

19
推荐指数
3
解决办法
6257
查看次数

INAD JOIN在UPDATE OUTPUT中的一个t-sql查询中

需要INNER JOIN UPDATE OUTPUT返回的结果集与另一个表并返回结果.可能吗?

这是一个小例子:

CREATE TABLE [dbo].[Customers]
(   
   [CustomerId] [int],   
   [CustomerName]  [nvarchar](50)
)
GO

CREATE TABLE [dbo].[Orders]
(   
   [OrderId] [int],   
   [OrderName]  [nvarchar](50)
)
GO

CREATE TABLE [dbo].[CustomerOrders]
(   
   [CustomerId] [int],   
   [OrderId]  [int]
)
GO

INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (1, 1)
INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (1, 2)
INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (2, 1)
GO
Run Code Online (Sandbox Code Playgroud)

需要在CustomerOrders表上更新OrderId并返回客户的名称,所有这些都是一次性完成.到目前为止,我只能返回CustomerIds:

UPDATE CustomerOrders SET OrderId=NULL 
OUTPUT Deleted.CustomerId
WHERE OrderId='1'
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

在C#多行逐字字符串中转义string.Format的参数

string template = @"  
          {  
            argument1   = ""{0}"";
            argument2   = {1};  
          }";
Run Code Online (Sandbox Code Playgroud)

当我将它格式化为string.Format的常用字符串时,我自然会得到一个异常,即输入字符串的格式不正确.我尝试转义msdn文档中推荐的参数,比如"{{0}}"甚至"{{{0}}}",但我仍然得到相同的异常.关于如何格式化这样一个字符串的任何想法?

谢谢!

PS [edit]我的原始字符串用于生成WCAT场景文件:

 string scenarioHeaderTemplate = @"
    scenario
    {{
       name    = ""WCAT Scenario"";
       warmup      = {0};
       duration    = {1};
       cooldown    = {2};

       default
       {
           version     = HTTP11;
           setheader
           {
               name    = ""Connection"";
               value   = ""keep-alive"";
           }
           statuscode  = 200;
           close       = ka;
       }
     }}";
Run Code Online (Sandbox Code Playgroud)

如果我尝试string.Format(scenarioHeaderTemplate,10,10,10),它会抛出;

c# string string.format

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

在SQL视图中使用COALESCE

我需要从几个表创建一个视图.视图中的一列必须由一个表中的多个行组成,作为带逗号分隔值的字符串.

这是我想要做的简化示例.

Customers:
CustomerId int
CustomerName VARCHAR(100)

Orders:
CustomerId int
OrderName VARCHAR(100)
Run Code Online (Sandbox Code Playgroud)

客户和订单之间存在一对多的关系.所以给出了这些数据

Customers
1 'John'
2 'Marry'

Orders
1 'New Hat'
1 'New Book'
1 'New Phone'
Run Code Online (Sandbox Code Playgroud)

我希望视图是这样的:

Name     Orders
'John'   New Hat, New Book, New Phone
'Marry'  NULL
Run Code Online (Sandbox Code Playgroud)

因此无论他们是否有订单,每个人都会出现在表格中.

我有一个存储过程,我需要转换到这个视图,但似乎你不能声明参数并在视图中调用存储过程.有关如何将此查询添加到视图中的任何建议?

CREATE PROCEDURE getCustomerOrders(@customerId int)
AS
   DECLARE @CustomerName varchar(100)
   DECLARE @Orders varchar (5000)

   SELECT @Orders=COALESCE(@Orders,'') + COALESCE(OrderName,'') + ',' 
   FROM Orders WHERE CustomerId=@customerId

   -- this has to be done separately in case orders returns NULL, so no customers are …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server coalesce sql-server-2008 sql-view

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

将1行表展平为键值对表

获取表示连续列值的键值对结果集的最佳方法是什么?

给出下面的表A只有1行


Column1 Column2 Column3 ...
Value1  Value2  Value3
Run Code Online (Sandbox Code Playgroud)

我想查询它并插入另一个表B:


Key                  Value
Column1              Value1
Column2              Value2
Column3              Value3
Run Code Online (Sandbox Code Playgroud)

表A中的一组列事先不知道.

注意:我正在查看FOR XML和PIVOT功能以及动态SQL来执行以下操作:


    DECLARE @sql nvarchar(max)
    SET @sql = (SELECT STUFF((SELECT ',' + column_name 
                              FROM INFORMATION_SCHEMA.COLUMNS 
                              WHERE table_name='TableA' 
                              ORDER BY column_name FOR XML PATH('')), 1, 1, ''))
    SET @sql = 'SELECT ' + @sql + ' FROM TableA'
    EXEC(@sql)
Run Code Online (Sandbox Code Playgroud)

sql t-sql pivot sql-server-2008

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

Singleton的简单实现

这不是一个更简单,更安全(因此更好)的方法来实现单例而不是双重检查锁定mambo-jambo?这种方法有什么缺点吗?


public class Singleton
{
    private static Singleton _instance;
    private Singleton() { Console.WriteLine("Instance created"); }

    public static Singleton Instance
    {
        get
        {
            if (_instance == null)
            {
                Interlocked.CompareExchange(ref _instance, new Singleton(), null);
            }
            return _instance;
        }
    }
    public void DoStuff() { }
}
Run Code Online (Sandbox Code Playgroud)

编辑:线程安全测试失败,谁能解释为什么?为什么Interlocked.CompareExchange不是真正的原子?


public class Program
{
   static void Main(string[] args)
   {
      Parallel.For(0, 1000000, delegate(int i) { Singleton.Instance.DoStuff(); });
   }
} 

Result (4 cores, 4 logical processors)
Instance created
Instance created
Instance created
Instance created
Instance created
Run Code Online (Sandbox Code Playgroud)

.net c# singleton multithreading

8
推荐指数
3
解决办法
4864
查看次数

业务层设计困境:内存还是IO?

我正在研究的项目面临着如何从数据库中获取对象和对象集合的设计困境.有时将来自数据库的*all*对象及其属性缓冲到内存中是有用的,有时仅设置对象id并按需查询其属性(每个对象1 db调用以获取所有属性)是有用的.在许多情况下,集合需要支持缓冲对象到内存中并使用最少的信息进行初始化以进行按需访问.毕竟,并非所有东西都可以缓冲到内存中,并不是所有东西都可以按需读取.这是一个无处不在的内存与IO问题.

有没有人必须面对同样的问题?怎么影响你的设计?有什么艰难的教训?还有其他想法和建议吗?

编辑:我的项目是业务层dll的典型示例,由Web应用程序,Web服务和桌面应用程序使用.当为桌面应用程序请求产品列表并仅按产品名称显示时,可以通过这一系列步骤显示所有产品(假设数据库中
有数百万个产品):1.一个数据库调用获取所有产品名称
2.如果用户单击产品以查看详细信息(按需访问),则进行一次db调用以获取所有产品信息

但是,如果Web服务将使用相同的API来显示包含详细信息的所有产品,则网络流量将变得很繁琐.在这种情况下更好的顺序是:
1.什么,只缓冲一个数据库调用缓冲所有产品和产品领域(在这种情况下缓冲100万产品看起来也很可怕)

c# sql oop database-design database-performance

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

在sproc中返回OUTPUT参数中的值

我有一个存储过程,它返回一个对象的所有字段.

CREATE PROCEDURE getCustomer
(
   @CustomerId int OUTPUT
)
AS
BEGIN
    SELECT @CustomerId=CustomerId,FirstName,LastName FROM Customers
END
Run Code Online (Sandbox Code Playgroud)

我希望能够将对象的id作为输出参数返回,以便另一个sproc可以使用它.我在这个例子中得到这个错误:

A SELECT statement that assigns a value to a variable must not be combined with 
data-retrieval operations.

CREATE PROCEDURE getCustomer_and_more
AS
BEGIN
DECLARE @CustomerId int

EXEC getCustomer @CustomerId OUTPUT

-- call another sproc that requires this @CustomerId
END
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server stored-procedures sql-server-2008

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