小编kas*_*sey的帖子

为什么这样做?方法重载+方法重写+多态

在以下代码中:

public abstract class MyClass
{
public abstract bool MyMethod(
        Database database,
        AssetDetails asset,
        ref string errorMessage);
}

public sealed class MySubClass : MyClass
{
    public override bool MyMethod(
        Database database,
        AssetDetails asset,
        ref string errorMessage)
    {
        return MyMethod(database, asset, ref errorMessage);
    }

    public bool MyMethod(
        Database database,
        AssetBase asset,
        ref string errorMessage)
    {
    // work is done here
}
}
Run Code Online (Sandbox Code Playgroud)

其中AssetDetails是AssetBase的子类.

为什么第一个MyMethod在传递AssetDetails时会在运行时调用第二个,而不是陷入递归的无限循环?

c# polymorphism overriding overloading

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

SQL异常:在此批处理中无法调用"模拟会话安全上下文",因为同时批处理已调用它

从我们的Web应用程序打开到SQL Server 2005的连接时,我们偶尔会看到此错误:

无法在此批处理中调用"模拟会话安全上下文",因为同时批处理已调用它.

我们使用MARS和连接池.

该异常源自以下代码:

protected SqlConnection Open()
{
    SqlConnection connection = new SqlConnection();
    connection.ConnectionString = m_ConnectionString;
    if (connection != null)
    {
        try
        {
            connection.Open();
            if (m_ExecuteAsUserName != null)
            {
                string sql = Format("EXECUTE AS LOGIN = {0};", m_ExecuteAsUserName);
                ExecuteCommand(connection, sql);
            }
        }
        catch (Exception exception)
        {
            connection.Close();
            connection = null;
        }
    }
    return connection;
}
Run Code Online (Sandbox Code Playgroud)

我发现了一篇MS Connect文章,该文章表明,在发送EXECUTE AS LOGIN命令之前,如果先前的命令尚未终止,则会导致错误.然而,如果连接刚刚打开,怎么会这样呢?

这可能与连接池与MARS奇怪地交互有关吗?

更新:从短期来看,我们已经通过在发生这种情况时清除连接池来实现一种解决方法,以消除不良连接,因为它会不断地回复给各个用户.(现在这种情况每天发生5-10次,只有少量的同时用户,所以这很烦人.)但如果有人有任何进一步的想法,我们仍然在寻找一个真正的解决方案......

c# asp.net connection-pooling sql-server-2005 sql-server-mars

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

nHibernate ShowSql会对实时系统产生什么影响吗?

我已使用以下配置代码将nHibernate配置为将其SQL语句输出到Visual Studio输出窗口:

var configuration = Fluently.Configure(cfg)
                .Database(
                    MsSqlConfiguration.MsSql2005
                    .ConnectionString(connectionString)
                    .DefaultSchema("dbo")
                    .UseReflectionOptimizer()
                    .AdoNetBatchSize(32)
                    .ShowSql()
Run Code Online (Sandbox Code Playgroud)

在我的Web.config中:

<appender name="NHibernateFileLog" type="log4net.Appender.TraceAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
  </layout>
</appender>

<logger name="NHibernate.SQL" additivity="false">
  <level value="DEBUG"/>
  <appender-ref ref="NHibernateFileLog"/>
</logger>
Run Code Online (Sandbox Code Playgroud)

这会对现场系统产生任何性能影响吗?实时系统上的日志级别是ERROR,所以我猜这意味着记录器不会打开,但是我的nHibernate配置上的ShowSql是否还会耗尽资源?

.net nhibernate configuration logging log4net

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


如何在.NET CF中隐藏选项卡(而不仅仅是禁用它)

当选中TabControl上的特定选项卡时,我当前使用TabControl.Enabled = false禁用所有其他选项卡.我也想隐藏它们以避免混淆用户.

有没有办法在不删除选项卡然后再添加它们的情况下执行此操作?

.net compact-framework tabcontrol

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

Autofac错误:实例注册只能支持SingleInstance()共享

当我尝试使用autofac注册我的类时,我收到以下错误:"实例注册'GetAllDivisionsCommand'只能支持SingleInstance()共享".

我不明白为什么我会收到这个错误,但是假设它与具有用于缓存的静态成员变量的类有关,因为这是该类唯一不同的东西.我没有遇到任何其他类注册为SingleInstance或InstancePerDependency的问题.

本质上,该类用于从数据库中检索很少更改的分区列表,并缓存结果.每次运行该命令时,它首先检查数据库上的更改,然后在检测到更改时重新运行查询; 如果没有,它将返回缓存列表.

所以我试图用Autofac注册GetAllDivisionsCommand作为IGetAllDivisionsCommand.IGetAllDivisionsCommand本身实现了IInjectableCommand,它只是一个标记接口,以及ICachedListCommand.具体的命令类继承自静态成员变量所在的抽象基类CachedListCommand.

有谁知道什么会导致此错误消息?SingleInstance对我不起作用,因为我无法继续重复使用同一个会话.

码:

Type commandType = typeof(IInjectedCommand);
        Type aCommandType = typeof(GetAllDivisions);

        var commands =
            from t in aCommandType.Assembly.GetExportedTypes()
            where t.Namespace == aCommandType.Namespace
                  && t.IsClass
                  && !t.IsAbstract
                  && (commandType.IsAssignableFrom(t))
            let iface = t.GetInterfaces().FirstOrDefault(x => "I" + t.Name == x.Name)
            select new { Command = t, Interface = iface };

        foreach (var cmd in commands)
        {
            builder.RegisterInstance(cmd.Command).As(cmd.Interface).InstancePerLifetimeScope();
        }
Run Code Online (Sandbox Code Playgroud)

dependency-injection autofac

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