ClientConnectionId 的单声道等效项
Mono equivalent of ClientConnectionId
我想运行单声道下的这个功能(我现在的版本是4.0.2)
public Object GetConnectionProperty(SqlConnection _conn, string prop)
{
if (_conn.State == ConnectionState.Closed &
prop == "ServerVersion")
return string.Empty;
if (prop == "ClientConnectionId")
{
Guid guid = _conn.ClientConnectionId;
return guid.ToString();
}
return _conn.GetType().GetProperty(prop).GetValue(_conn);
}
但失败并显示错误:
error CS1061: Type `System.Data.SqlClient.SqlConnection' does not contain a
definition for `ClientConnectionId' and no extension method
`ClientConnectionId' of type `System.Data.SqlClient.SqlConnection' could be
found. Are you missing an assembly reference?
ClientConnectionId
的 Mono 等价物是什么?或者我该如何解决?
ClientConnectionId
未在单声道 SqlConnection class 中实现。如果你真的想为每个实例都有一些唯一的标识符,你可以自己做,例如从哈希码构造一个 id:
public static class SqlClientExtensions {
#if __MonoCS__
private static Dictionary<int, string> _connIds = new Dictionary<int, string>();
#endif
public static string GetClientConnectionId(this SqlConnection conn) {
if(conn == null) {
return Guid.Empty.ToString();
}
#if __MonoCS__
if(!connIds.ContainsKey(conn.GetHashCode())) {
connIds.Add(conn.GetHashCode(), Guid.NewGuid().ToString());
}
return connIds[conn.GetHashCode()];
#else
return conn.ClientConnectionId.ToString();
#endif
}
}
然后你就可以在你的方法中使用它了:
if (prop == "ClientConnectionId")
{
return _conn.GetClientConnectionId();
}
P.S.:
哈希码可能会在不同的时间点针对 2 个不同的实例重复。
P.S.(2):
__MonoCS__
仅由单声道编译器定义。调用 ClientConnectionId
属性 的部分将不会被单声道编译器看到,反之亦然。另一部分和 .net 编译器。
P.S.(3):
另一种解决方案是 subclass SqlConnection
并实现 ClientConnectionId
但它是密封的...而且这还需要 subclassing 一些其他 classes 在内部实例化 SqlConnection
class。
我想运行单声道下的这个功能(我现在的版本是4.0.2)
public Object GetConnectionProperty(SqlConnection _conn, string prop)
{
if (_conn.State == ConnectionState.Closed &
prop == "ServerVersion")
return string.Empty;
if (prop == "ClientConnectionId")
{
Guid guid = _conn.ClientConnectionId;
return guid.ToString();
}
return _conn.GetType().GetProperty(prop).GetValue(_conn);
}
但失败并显示错误:
error CS1061: Type `System.Data.SqlClient.SqlConnection' does not contain a
definition for `ClientConnectionId' and no extension method
`ClientConnectionId' of type `System.Data.SqlClient.SqlConnection' could be
found. Are you missing an assembly reference?
ClientConnectionId
的 Mono 等价物是什么?或者我该如何解决?
ClientConnectionId
未在单声道 SqlConnection class 中实现。如果你真的想为每个实例都有一些唯一的标识符,你可以自己做,例如从哈希码构造一个 id:
public static class SqlClientExtensions {
#if __MonoCS__
private static Dictionary<int, string> _connIds = new Dictionary<int, string>();
#endif
public static string GetClientConnectionId(this SqlConnection conn) {
if(conn == null) {
return Guid.Empty.ToString();
}
#if __MonoCS__
if(!connIds.ContainsKey(conn.GetHashCode())) {
connIds.Add(conn.GetHashCode(), Guid.NewGuid().ToString());
}
return connIds[conn.GetHashCode()];
#else
return conn.ClientConnectionId.ToString();
#endif
}
}
然后你就可以在你的方法中使用它了:
if (prop == "ClientConnectionId")
{
return _conn.GetClientConnectionId();
}
P.S.:
哈希码可能会在不同的时间点针对 2 个不同的实例重复。
P.S.(2):
__MonoCS__
仅由单声道编译器定义。调用 ClientConnectionId
属性 的部分将不会被单声道编译器看到,反之亦然。另一部分和 .net 编译器。
P.S.(3):
另一种解决方案是 subclass SqlConnection
并实现 ClientConnectionId
但它是密封的...而且这还需要 subclassing 一些其他 classes 在内部实例化 SqlConnection
class。