在以下代码中:
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时会在运行时调用第二个,而不是陷入递归的无限循环?
从我们的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
我已使用以下配置代码将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是否还会耗尽资源?
如何压缩内联脚本和样式标签?
当选中TabControl上的特定选项卡时,我当前使用TabControl.Enabled = false禁用所有其他选项卡.我也想隐藏它们以避免混淆用户.
有没有办法在不删除选项卡然后再添加它们的情况下执行此操作?
当我尝试使用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) .net ×2
c# ×2
asp.net ×1
autofac ×1
javascript ×1
log4net ×1
logging ×1
minify ×1
nhibernate ×1
overloading ×1
overriding ×1
polymorphism ×1
tabcontrol ×1