我有一段代码需要在我的存储库保存时检查实体.我在保存上有一个NHibernate拦截器来检查这个但是当我调用该GetGenericTypeDefinition函数时代码失败并出现错误:
[InvalidOperationException:由于对象的当前状态,操作无效.] System.RuntimeType.GetGenericTypeDefinition()+ 7525641
代码是这样的:
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent evt)
{
if (evt.Entity.GetType().GetGenericTypeDefinition() == typeof(IChild<>))
{
var parent = (evt.Entity as IChild<Entity>).Parent;
if (parent != null)
{
parent.UpdateCacheCounters();
evt.Session.Save(parent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
在处理数据库中的十六进制值时,MySQL UNHEX和X之间的区别是什么?
例如.
SELECT * FROM test WHERE guidCol IN (UNHEX('hexadecimalstring'));
SELECT * FROM test WHERE guidCol IN (X'hexadecimalstring');
Run Code Online (Sandbox Code Playgroud)
两者都给了我精确的结果集.那有什么区别吗?性能影响?
编辑: guidCol的基础类型当然是二进制的
我在 SQL Server 中有一个用户定义的函数,它接受 TVP(表值参数)作为参数。在 EF 中,如何从 C# 调用这样的函数?
我尝试使用该方法,ObjectContext.CreateQuery<>但出现以下错误:
函数“QueryByParam”的参数“param”无效。参数只能是可以转换为 Edm 标量类型的类型。
也尝试过方法ObjectContext.ExecuteStoreQuery<>并得到相同的错误。IQueryable无论如何它都不会返回。
示例代码
[DbFunction(nameof(SampleDbContext), "QueryByParam")]
public IQueryable<SecurityQueryRow> QueryByParam(IEnumerable<ProfileType> profiles, bool isActive = false)
{
DataTable dataTable = ....
ObjectParameter profilesParam = new ObjectParameter("profileTypeIds", dataTable);
ObjectParameter isActiveParam = new ObjectParameter("isActive ", isActive);
return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<SecurityQueryRow>(
string.Format("[{0}].[{1}](@profileTypeIds, @isActive)", GetType().Name, "QueryByParam"),
profilesParam,
isActiveParam);
}
Run Code Online (Sandbox Code Playgroud)
要求是我们需要一个 IQueryable 返回,而不是消耗的结果。
c# sql-server entity-framework table-valued-parameters entity-framework-6
我正在使用Type.GetConstructor(Type.EmptyTypes)获取类的默认构造函数.如果类具有没有参数(class A)的默认构造函数,则它可以工作.但是如果一个类有一个带有所有参数optional(class B)的构造函数,它就不起作用.程序不知道可选参数是什么,因为它只需要默认的构造函数.我可以使用哪些语句使其适用于这两种情况?谢谢,感谢任何帮助!
public class A
{
public A() {}
}
public class B
{
public B(int i = 0, string str = "") {}
}
Run Code Online (Sandbox Code Playgroud) 我想获得一个类中所有成员的集合.我怎么做?我使用以下内容,但它给了我许多额外的名字和成员.
Type obj = objContactField.GetType();
MemberInfo[] objMember = obj.GetMembers();
String name = objMember[5].Name.ToString();
Run Code Online (Sandbox Code Playgroud) 我需要根据键在VB.net中订购一个Dictionary.键和值都是字符串.字典没有.Sort().有没有办法做到这一点,而无需编写自己的排序算法?
每当我想插入一个SortedList,我检查项目是否存在,然后我插入.这两次执行相同的搜索吗?一旦看到该项目是否存在并再次找到插入项目的位置?有没有办法优化它来加快速度,或者只是这样做的方式,没有必要改变?
if( sortedList.ContainsKey( foo ) == false ){
sortedList.Add( foo, 0 );
}
Run Code Online (Sandbox Code Playgroud) 我正在做一个性能关键程序(很少学术),我正在寻求尽可能优化(不像它证明"这是"瓶颈).
我有一个自定义字典结构(.NET的包装Dictionary<,>),我会不断删除一个阶段的项目(按Key值).我需要Value删除的项目.现在我必须这样做:
T t;
if !TryGet(key, out t)
return false;
Remove(key);
Run Code Online (Sandbox Code Playgroud)
这是两次查找.我会喜欢这个:
public bool Remove(S key, out T value)
{
// implementation
}
Run Code Online (Sandbox Code Playgroud)
我知道框架中没有任何内容,但是某处有实现吗?如果是这样的话,我会用那个更改我的支持词典.
编辑:嗯,我知道这两个TryGetValue和Remove是O(1).只知道是否有任何集合结构只能在一次查找中产生相同的效果.正如我所说,我正在努力尽可能地优化.只是知道.
我想采用驼峰式的类名或枚举名称,并以普通文本显示给用户.我怎样才能以编程方式执行此操作?
样本输入:
MainPageBackgroundColor
预期产量:
主页背景颜色
要么
主页背景颜色
c# ×8
dictionary ×2
reflection ×2
.net ×1
constructor ×1
generics ×1
guid ×1
hex ×1
inlining ×1
member ×1
mysql ×1
nhibernate ×1
performance ×1
sortedlist ×1
sorting ×1
sql-server ×1
string ×1
trygetvalue ×1
vb.net ×1