我需要使用初始值向MS SQL 2005数据库添加新列.但是,我不想在此列上自动创建默认约束.在我添加列的时间点,默认/初始值是正确的,但这可能会随着时间而改变.因此,将来对表的访问必须指定一个值而不是接受默认值.
我能想到的最好的是:
ALTER TABLE tbl ADD col INTEGER NULL
UPDATE tbl SET col = 1
ALTER TABLE tbl ALTER COLUMN col INTEGER NOT NULL
Run Code Online (Sandbox Code Playgroud)
对于较大的表(100,000到1,000,000条记录)来说,这似乎有点低效.
我已尝试使用默认值添加列,然后删除默认约束.但是,我不知道默认约束的名称是什么,而不是访问sysobjects并放入数据库特定的知识.
请,必须有更好的方法.
每当用户移动到另一个应用程序时,我都会想要暂停一个游戏.例如,当选择超级按钮菜单时,用户将Windows键,alt-tab按到另一个应用程序,单击另一个应用程序或任何其他会使应用程序失去焦点的应用程序.
当然这应该是微不足道的!我只有一个Page
和一个Canvas
,我已经尝试GotFocus
和LostFocus
事件Canvas
,但他们不开火.
我来最接近的是使用PointerCaptureLost
上CoreWindow
捕捉指针之后.当选择了超级按钮菜单时,这适用于应用程序切换,但是当按下Windows键时这不起作用.
编辑:
在下面的Chris Bowen的帮助下,最终的"解决方案"如下:
public MainPage() {
this.InitializeComponent();
CapturePointer();
Window.Current.CoreWindow.PointerCaptureLost += PointerCaptureLost;
Window.Current.CoreWindow.PointerPressed += PointerPressed;
Window.Current.VisibilityChanged += VisibilityChanged;
}
private void VisibilityChanged(object sender, VisibilityChangedEventArgs e) {
if(e.Visible) {
CapturePointer();
}
else {
Pause();
}
}
void PointerPressed(CoreWindow sender, PointerEventArgs args) {
CapturePointer();
}
private void CapturePointer() {
if(hasCapture == false) {
Window.Current.CoreWindow.SetPointerCapture();
hasCapture = true;
}
}
void PointerCaptureLost(CoreWindow sender, PointerEventArgs args) {
hasCapture …
Run Code Online (Sandbox Code Playgroud) 我正在尝试根据URI来维护对象集合:
public class ConceptCollection : KeyedCollection<Uri, Concept> {
protected override Uri GetKeyForItem(Concept item) {
return item.Uri;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,URI通常仅根据Uri的片段而不同.因此,以下会导致错误:
ConceptCollection wines = new ConceptCollection();
Concept red = new Concept("http://www.w3.org/2002/07/owl#RedWine");
Concept white = new Concept("http://www.w3.org/2002/07/owl#WhiteWine");
wines.Add(red);
wines.Add(white); // Error: An item with the same key has already been added.
Run Code Online (Sandbox Code Playgroud)
根据http://msdn.microsoft.com/en-us/library/f83xtf15.aspx:
Equals方法比较两个实例,而不考虑它们可能包含的用户信息(UserInfo)和片段(Fragment)部分.例如,给定URI http://www.contoso.com/index.htm#search 和 http:// user:password@ www.contoso.com/ index.htm,Equals方法将返回true.
我已经辞职了,不得不破解这个.但为什么它会这样呢?我可以看到用户信息的逻辑,但不能看到片段.
在为持久存储的数据编写测试时,我想出了一个测试:
[TestMethod]
public void DoCreateDeleteTest() {
PersistentDataStore pds = new PersistentDataStore();
bool createSuccess = pds.Save("id", "payload");
Assert.AreEqual(true, createSuccess);
bool deleteSuccess = pds.Delete("id");
Assert.AreEqual(true, deleteSuccess);
}
Run Code Online (Sandbox Code Playgroud)
只要一切正常,这似乎很好.该函数没有先前的依赖关系,它会自行清理.问题是:当.Save()方法执行保存但返回false/failure时.断言触发并且不调用删除,因此它不会自行清理.
在此之后,数据库中存在名为"id"的持久数据,并且所有将来的保存都将失败.
我能想到解决它的唯一方法是在保存之前进行预防性删除,但这似乎是一种大规模的破解方式.
WinForms已经让位于WPF和MVVM之类的新模型,它们更好地支持测试驱动开发,与WPF一起工作得非常好.此外,在我看来,ASP.NET与WinForms的处理方式非常接近,例如代码隐藏中的事件处理程序,它使用继承或部分类进行链接.使用WPF和MVVM,这种机制不再受欢迎,数据绑定用于进一步将用户界面分离到仅仅是皮肤的位置.
所以,我敢打赌,微软正在构建类似于WPF启发,基于XAML的ASP.NET替代品.也就是说,用XAML编写的HTML页面视图使它们可以利用绑定,但在运行时将呈现基于标准的HTML.但是,我在网上找不到任何参考资料.(在CodePlex上有一篇ASP.NET MVVM文章,但是那里的绑定看起来非常简单.)
这不是一个社区维基问题,我真的想知道微软正在做什么.但是,我猜我无法阻止这种猜测(我已经做了一些).
编辑:指向Silverlight的相当多的回复已经通过.我本来应该更明确.和Silverlight一样酷,我真的在寻找可以在LOB应用程序中使用的标准兼容技术.
c# ×3
database ×2
alter-table ×1
asp.net ×1
focus ×1
mvvm ×1
sql ×1
sql-server ×1
unit-testing ×1
uri ×1
windows-8 ×1
wpf ×1