我现在正在玩SubSonic 3.0,它看起来非常简单(除了我还需要在SimpleRepository和ActiveRecord之间做出决定,但这是另一个故事).
但是,由于文档有点稀疏,我不确定它是否支持外部关系和延迟加载.基本上,我有一个课程发布:
public class Posting {
[SubSonicPrimaryKey]
public Guid InternalId { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public DateTime? PostingDate { get; set; }
public List<Comment> Comments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和一个评论:
public class Comment
{
public string Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如您所见,Posting有一个评论列表.我能以某种方式告诉SubSonic这两者是否相关?那就是我保存帖子时可以自动保存所有评论?更重要的是,当我加载一个帖子时,我希望评论列表最初是空的,并且在某些时候说"好的,请立即填充".
我知道我可以在Code中手动管理它,但我想知道SubSonic是否可以在我做手动工作之前做到这一点.
奇怪的问题,但一个让我困惑的问题.在我们有终端和DOS的过去,应用程序通常只有一个"窗口",这是一个全屏幕.当人们切换功能时,没有打开新窗口的概念,而是覆盖了主窗口的内容.所以只有一个主窗口,但是在其中呈现了多个屏幕.
如何在现代应用程序(WinForms或WPF)中创建类似的东西?
似乎有两种方法:
我想知道是否有更好的方法?基本上是"看,我不关心边框样式/图标或主菜单条等内容.我想要的就是将这个屏幕渲染到这个区域".有点像ASP.net主页,其中实际页面只定义被渲染到占位符的内容.
是否有一些适当的机制来做这样的事情?
或者整个方法有问题吗?
关于jQuery UI Dialog的一个好处是它有一个Buttons选项,可以自动正确定位它们.我只是想知道:我可以以某种方式在按钮旁放置元素吗?我有一个Ajax-Loader gif,我想在对话框的左下角显示,而按钮保持在右下方?
我知道我可以删除按钮并在HTML中手动创建它们,但由于jQuery已经为我提供了定位和样式,我想保留该功能,如果它有意义的话.
$("#newProjectDialog").dialog({
bgiframe: true,
resizable: false,
width: 400,
modal: true,
overlay: {
backgroundColor: '#000',
opacity: 0.5
},
buttons: {
'Create': function() {
$("#ajax-loader").show();
// Make the Ajax Call and whatever else is needed
$(this).dialog('destroy');
},
Cancel: function() {
$(this).dialog('destroy');
}
}
});
Run Code Online (Sandbox Code Playgroud) 我想为文件存储一些与应用程序相关的元数据,而NTFS备用数据流(AltDS)允许我将这些元数据直接存储在文件上,而不是存储在单独的数据库中.
我觉得这不是一个好主意.我知道这只适用于NTFS,但至少如果用户将文件复制/移动到非NTFS驱动器,他们会从Windows获得警告(是的,是的,没有人读警告,我知道) -
但是,在文件上存储其他数据可能会变得非常浪费,因为即使卸载了我的应用程序,AltDS也会保留.就像十年前人们使用"注册表清理工具"在卸载程序后从注册表中删除无用的条目,以使他们的系统运行得更快(当清理器清理得太多时不太稳定......).
我只是想知道它们可以合理地用于什么?它们应该完全留给Microsoft Apps使用吗?或者是否有某种类型的应用程序可以使用它们的某些共同策略(除了恶意软件)?
编辑:只是为了澄清我的想法.我正处于为自己编写小型文档管理系统的早期阶段.因为我想有自由移动文件,我想在文件上存储元数据,这样如果我移动/重命名/修改它们,我的应用程序仍然可以识别它们.它可以是整个元数据,也可以只是与单独数据库一起使用的GUID.
总结给出的要点:
优点:
缺点:
我是C++的新手,我正在尝试创建一个自定义异常,它在其ctor中接收一条消息.
我现在拥有的是:
class LevelLoadException : public std::exception
{
public:
LevelLoadException(std::string msg) : m_message(msg) { }
const char * what () const throw ()
{
return m_message.c_str();
}
private:
std::string m_message;
};
Run Code Online (Sandbox Code Playgroud)
在我的调用代码,我有这样的作为开关语句的一部分(c是一个char,或更具体地,c = line[x];其中,x是一种int和line是一个std::string);
default:
throw LevelLoadException("Invalid Character in Level: " + c);
Run Code Online (Sandbox Code Playgroud)
问题是我的Exception获得了一个完全不相关的字符串(这是抛出相同方法的一部分:) throw std::exception("There is more than 1 player start in the level.").
我已经排除了一个逻辑错误 - 我的程序到达了正确的字符串抛出正确异常的行.所以我很确定这是一个终身/内存管理问题.
据我所知,C++默认是按值复制的.所以我认为调用ctor LevelLoadException会立即复制字符串.但似乎有一些指针正在进行,因为我正在构建的字符串看起来像一个C字符串(const char*).
我查看了这个std::exception类,这需要一个 …
我有一堆用户,具有给定的开始和结束时间,例如:
{ Name = "Peter", StartTime = "10:30", EndTime = "11:00" },
{ Name = "Dana", StartTime = "11:00", EndTime = "12:30" },
{ Name = "Raymond", StartTime = "10:30", EndTime = "14:00" },
{ Name = "Egon", StartTime = "12:00", EndTime = "13:00" },
{ Name = "Winston", StartTime = "10:00", EndTime = "12:00" }
Run Code Online (Sandbox Code Playgroud)
我想根据它们重叠的时间将它们放入桶中(基于可配置的阈值,例如,它们需要重叠至少半小时).我希望水桶最好是4个大项目,但2-5的任何范围都是可以接受的.
在上面的例子中,没有4个人匹配,所以我有一个3桶(Peter,Raymond,Winston)和2个(Dana,Egon)之一.
我已经制作了一个似乎依赖于机会而不是科学的算法原型:
这适用于前几个桶,但导致只有2个人可以更好地组合的桶.
我可以更改算法以从列表中删除所有理想的桶并重新洗牌并尝试更多,但我觉得这应该是一个常见问题 - 它就像工人的轮班分配,或者背包问题.
有谁知道这类问题的标准算法?
(标记组合因为我认为这是适用的数学领域,如果错误则纠正我)
好的,新手多线程问题:
我有一个Singleton类.该类有一个静态列表,基本上这样工作:
class MyClass {
private static MyClass _instance;
private static List<string> _list;
private static bool IsRecording;
public static void StartRecording() {
_list = new List<string>();
IsRecording = true;
}
public static IEnumerable<string> StopRecording() {
IsRecording = false;
return new List<string>(_list).AsReadOnly();
}
public MyClass GetInstance(){
}
public void DoSomething(){
if(IsRecording) _list.Add("Something");
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,用户可以调用StartRecording()来初始化List,然后对instance-method的所有调用都可以向列表添加内容.但是,多个线程可能会将实例保存到MyClass,因此多个线程可能会向列表中添加条目.
但是,列表创建和读取都是单个操作,因此多线程情况下通常的读写器问题不适用.我能看到的唯一问题是插入顺序很奇怪,但这不是问题.
我可以按原样保留代码,还是需要采取任何预防措施来进行多线程处理?我应该在实际应用程序中添加它不是字符串列表而是自定义对象列表(所以代码是_list.Add(新对象(somedata))),但这些对象只保存数据,除了调用之外没有代码到DateTime.Now.
编辑:澄清以下答案:DoSomething不能是静态的(这里的类是缩写的,有很多东西正在使用实例变量,但这些由构造函数创建,然后才读取).这样做是否足够好
lock(_list){
_list.Add(something);
}
and
lock(_list){
return new List<string>(_list).AsReadOnly();
}
Run Code Online (Sandbox Code Playgroud)
还是我需要一些更深层次的魔法?
有点学术问题,但是:像Int这样的价值类型实际上是如何运作的?
我在mscorlib上使用了Reflector来了解System.Int32是如何实现的,它只是一个继承自System.ValueType的Struct.我正在寻找包含该值的数组的行中的某些东西,但我只发现了一个声明为int的字段 - 这意味着它是一个循环引用?
我的意思是,我可以写"int i = 14;",但是数字14需要以某种方式存储在某处,但我找不到"32位数组"或指针或其他东西.
这是编译器所做的一些魔术吗?这些魔术类型是规范的一部分吗?(类似于System.Attribute或System.Exception是"特殊"类型)
编辑:如果我声明自己的结构,我添加字段.这些字段是内置类型,例如int.所以CLR知道我持有一个int.但它如何知道int是32位,签名?仅仅是规范指定了某些基本类型并因此使它们"神奇",还是有技术机制?假设示例:如果我想要声明一个Int36,即36位的整数,我可以通过指定"好的,预留36位"来创建一个与Int32 完全相同的类型(除了4个额外的位) ,或者是内置的原语,我必须以某种方式解决这个问题(即使用Int64和仅设置最后36位的代码)?
如上所述,所有非常学术和假设,但我总是对此表示疑惑.
我对SharePoint 2007的一个抱怨是复杂的SPWeb.Dispose规则,如果你不处理你所拥有的东西,它们可能导致大量资源泄漏,或者如果你不需要处理时会导致各种其他奇怪的问题.Roger Lamb的发帖试图总结疯狂.但我想知道SharePoint 2010是否能改善这一点?
我有Beta设置,但这里看不到太大的区别,但有些东西至少有所改进吗?
我有一个基本上看起来像这样的数据库:
id uniqueidentifier NOT NULL
data nvarchar
nextid uniqueidentifier NULL
Run Code Online (Sandbox Code Playgroud)
这是一个链接列表,因为每个nextid链接到该表中的id,除了最后一个,这里nextid为NULL.我知道第一个节点的id.
我想以正确的顺序选择它们,给出一个起始ID.
有没有办法可以在T-SQL (编辑:SQL 2008)或LINQ中完成?
我知道我可以编写代码在C#中手动执行,只是想知道我是否可以按顺序查询?