可能重复:
比较两个实体框架实体的最佳方法是什么?
我想知道比较两个相同类型实体的最有效方法。
一个实体是通过xml文件手动创建的(即,新实例和手动设置的属性),而另一个则是从我的对象上下文中删除的。
我想知道每个实例中的属性值是否相同。
我的第一个想法是从每个对象生成属性值的哈希值并比较哈希值,但是可能有另一种方法还是内置方法?
欢迎大家提出意见。
非常感谢,
詹姆士
更新
我想出了这个:
static class ObjectComparator<T>
{
static bool CompareProperties(T newObject, T oldObject)
{
if (newObject.GetType().GetProperties().Length != oldObject.GetType().GetProperties().Length)
{
return false;
}
else
{
var oldProperties = oldObject.GetType().GetProperties();
foreach (PropertyInfo newProperty in newObject.GetType().GetProperties())
{
try
{
PropertyInfo oldProperty = oldProperties.Single<PropertyInfo>(pi => pi.Name == newProperty.Name);
if (newProperty.GetValue(newObject, null) != oldProperty.GetValue(oldObject, null))
{
return false;
}
}
catch
{
return false;
}
}
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还没有测试过,它更是一种思想,可以从小组中产生更多的想法。
可能存在问题的一件事是比较本身具有实体值的属性,如果默认比较器根据对象引用进行比较,那么它将永远不会成立。一种可能的解决方法是使相等运算符重载到我的实体上,以便对实体ID进行比较。
很长一段时间以来,我一直在使用一个名为CSS的类clear,它只有规则clear: both.我以下面的方式使用它(以Django语法显示,但它不重要):
{% for item in collection %}
<ul class="horiz"><!-- horizontal list -->
<li>{{ item }}</li>
<li>{{ item }}</li>
</ul>
<div class="clear"></div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在做一堆水平列表,使它看起来就像一张桌子.想象一下CSS规则.horiz li意味着什么float: left.请注意,我<div class="clear"></div>在这个"表"中的每一行之后使用,很多HTML用于这么简单的事情.
这真的是要走的路吗?我有没有想过更简单的东西?
是否在业务类中引用System.Windows.Forms并使用MessageBox.Show错误?
目前有一个事件处理装饰器类装饰服务类.当某些事件被解雇时,装饰者想询问用户是否要继续处理某些功能.
这个装饰器类有这些消息框可以吗?
我在C#表单中为DataGridView添加了一个复选框列.该功能需要是动态的 - 您选择一个客户并显示他们可以维修的所有物品,并选择您希望这次服务中的哪一个.
无论如何,代码现在将添加一个chckbox到DGV的开头.我需要知道的是:
1)如何制作它以便默认"检查"整列?2)当我点击DGV下方的按钮时,如何确保仅从"已检查"行获取值?
这是插入列的代码:
DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
doWork.HeaderText = "Include Dog";
doWork.FalseValue = "0";
doWork.TrueValue = "1";
dataGridView1.Columns.Insert(0, doWork);
Run Code Online (Sandbox Code Playgroud)
接下来呢?任何帮助将不胜感激!
我有一个例外,我需要吞下(日志记录期间的异常),但我不希望异常信息完全丢失到时间的迷雾,所以我想我也可以至少将其输出到调试使用
Debug.Write(ex.ToString());
Run Code Online (Sandbox Code Playgroud)
这样,如果有必要支持,至少可以在有问题的机器上使用DebugView.
麻烦是在发布模式下删除Debug类 - 如何在发布模式下输出要调试的内容?
是否可以让退出时间退出我的程序?
我制作了Windows移动C#程序,我希望在5分钟之后 -
如果用户没有按任何键或点击屏幕,程序将退出.
我怎么能做到的?
谢谢你的补充
我有一个问题,我无法解决.假设我们有以下两个类和一个继承关系:
public class A {
}
public class B extends A {
public void foo() {}
}
Run Code Online (Sandbox Code Playgroud)
我想要检测其他代码,使其看起来如下:
public class A {
public void print() { }
}
public class B extends A {
public void foo() { print(); }
}
Run Code Online (Sandbox Code Playgroud)
为了实现这个目标,我将我的实现基于java.lang.instrument包,使用具有我自己的类文件转换器的代理.该机制也称为动态字节码检测.
到目前为止一块蛋糕.现在,我的测试方法执行以下操作:
码:
B b = new B();
b.foo();
Run Code Online (Sandbox Code Playgroud)
由于instrumentation包中的以下限制,这不起作用:在调用时new B(),检测从B类开始,并在加载被操作的类时最终出现编译错误,因为超类A还没有print()方法!问题是我是否以及如何在类B之前触发类A的检测.我的classfiletransformer的transform()方法应该显式地用类A调用!所以我开始阅读并碰到了这个:
该java.lang.instrument.ClassFileTransformer.transform()的javadoc中说:
将为每个新的类定义和每个类重新定义调用转换器.使用ClassLoader.defineClass进行新类定义的请求.类重新定义的请求是使用Instrumentation.redefineClasses或其本机等效项进行的.
转换方法带有一个类加载器实例,所以我想,为什么不在B的检测开始时用类A 调用loadClass方法(loadClass调用defineClass).我预计仪器方法将被调用,但遗憾的是情况并非如此.而是在A没有仪器的情况下加载了类.(代理不会拦截加载过程,尽管它应该)
任何想法,如何解决这个问题?您是否看到为什么操作某些字节码的代理无法手动加载另一个类,然后希望通过该/任何代理发送的类?
请注意,以下代码正常工作,因为在操作B之前加载了A并进行了检测.
A a = new A();
B b = …Run Code Online (Sandbox Code Playgroud) 我可以使用自定义日志记录框架从 Java 应用程序记录字符串,如下所示:
logger.info("Version 1.2 of the application is currently running");
Run Code Online (Sandbox Code Playgroud)
因此,当用户向我发送日志文件时,我可以轻松查看他们正在运行的应用程序的版本。
上面代码的问题在于版本是硬编码在字符串文字中的,需要有人记住为每个版本更新它。在发布时忘记更新此字符串是相当不可避免的。
我想要做的是根据应用程序 JAR 的清单文件中的版本号之一自动更新此字符串文字:
Specification-Version: 1.2
Implementation-Version: 1.2.0.0
Run Code Online (Sandbox Code Playgroud)
我不介意这种情况发生在编译时还是运行时,只要版本号进入日志文件即可。
更新日期06/08/2009 15:52:简短回答NO.原始问题:
我找不到任何关于SPWeb.Site关于处理的指导.我已经阅读了一些关于处理SharePoint对象的最流行的最佳实践文档:
不幸的是,这些指南都没有提到SPWeb.Site.为了给出一些上下文,我正在编写一个公共扩展API,它接受SPWeb作为方法的参数,即:
public static void GetWebPartFromCatalog(this SPWeb web, string webPartName)
{
......
SPSite site = web.Site;
......
**OR** ??
using (SPSite site = web.Site)
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
我在SPWeb的refelector中看起来像是Close()方法,由SPWeb.Dispose()调用,并且它没有任何内容表明实际的SPSite成员字段被处理掉了.
更新:2009年8月6日13:47
在Alex的建议下
"将它放在一个运行100次的循环中,并使用WSS v3和MOSS 2007中的SPSite/SPWeb泄漏故障排除中描述的SPRequestStackTrace注册表项来检查您的测试代码是否是问题的根源."
我在webpart中运行了以下代码:
for (int i = 0; i < 100; i++)
{
using (SPWeb web = SPContext.Current.Site.OpenWeb(""))
{
SPSite site = web.Site;
Debug.WriteLine(site.Url);
}
}
Run Code Online (Sandbox Code Playgroud)
SharePoint日志中没有任何内容.
虽然我会毫不犹豫地从这个天真的实验中得出任何真正的结论,但它表明没有必要处置SPWeb.Site.从更加了解这个主题的人那里得到一个具体的答案真的很好.
更新:06/08/2009 14:52 Greg的评论提示我制定了m_Site的赋值,看起来它最终总是通过内部构造函数传递给SPWeb.例如SPWeb.OpenWeb通过在这个 …
c# ×4
java ×3
.net ×2
agent ×1
bytecode ×1
checkbox ×1
clear ×1
comparison ×1
concurrency ×1
css ×1
datagridview ×1
debugging ×1
dispose ×1
html ×1
logging ×1
manifest ×1
performance ×1
release ×1
sharepoint ×1
timer ×1
winforms ×1