小编Ren*_*ené的帖子

如何使视图列NOT NULL

我正在尝试创建一个视图,我希望列只有真或假.但是,似乎无论我做什么,SQL Server(2008)都认为我的位列可能会以某种方式为空.

我有一个名为"Product"的表,其中包含"Status"列INT, NULL.在视图中,我想为Product中的每一行返回一行,如果Product.Status列等于3,则将BIT列设置为true,否则位字段应为false.

示例SQL

SELECT CAST( CASE ISNULL(Status, 0)  
               WHEN 3 THEN 1  
               ELSE 0  
             END AS bit) AS HasStatus  
FROM dbo.Product  
Run Code Online (Sandbox Code Playgroud)

如果我将此查询保存为视图并查看对象资源管理器中的列,则将HasStatus列设置为BIT, NULL.但它永远不应该是NULL.我可以使用一些神奇的SQL技巧来强制使用此列NOT NULL.

请注意,如果我删除了CAST()周围的CASE列,则列被正确设置为NOT NULL,但是列的类型设置为INT,这不是我想要的.我想要它BIT.:-)

sql nullable sql-server-2008 sql-view

77
推荐指数
2
解决办法
5万
查看次数

自定义模型管理器中的绑定错误会删除用户输入的值

我正在使用ASP.NET MVC 3 RTM,我有一个这样的视图模型:

public class TaskModel
{
  // Lot's of normal properties like int, string, datetime etc.
  public TimeOfDay TimeOfDay { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

TimeOfDay属性是我自定义的结构,非常简单,所以我不在此处.我已经制作了一个自定义模型绑定器来绑定这个结构.模型绑定器非常简单:

public class TimeOfDayModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        try
        {
            // Let the TimeOfDay struct take care of the conversion from string.
            return new TimeOfDay(result.AttemptedValue, result.Culture);
        }
        catch (ArgumentException)
        {
            bindingContext.ModelState.AddModelError(bindingContext.ModelName, "Value is invalid. Examples of valid values: 6:30, 16:00");
            return bindingContext.Model; …
Run Code Online (Sandbox Code Playgroud)

c# custom-model-binder asp.net-mvc-3

8
推荐指数
1
解决办法
1820
查看次数

类型可为空时,不调用自定义模型绑定器

我有一个自定义结构TimeOfDay,在这样的视图模型中使用它:

public class MyViewModel
{
  public TimeOfDay TimeOfDay { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个自定义模型绑定器TimeOfDayModelBinder,并在Global.asax.cs中注册它,如下所示:

ModelBinders.Binders.Add(typeof(TimeOfDay), new TimeOfDayModelBinder());
Run Code Online (Sandbox Code Playgroud)

一切都很好.但是,如果我将我的视图模型更改为:

public class MyViewModel
{
  public TimeOfDay? TimeOfDay { get; set; } // Now nullable!
}
Run Code Online (Sandbox Code Playgroud)

我的自定义模型绑定器不再被调用.我知道该属性不再是TimeOfDay的类型,而是一个不同的Nullable.这是否意味着我应该在Global.asax.cs中添加我的自定义模型绑定器两次,如下所示:

ModelBinders.Binders.Add(typeof(TimeOfDay), new TimeOfDayModelBinder());
ModelBinders.Binders.Add(typeof(TimeOfDay?), new TimeOfDayModelBinder());
Run Code Online (Sandbox Code Playgroud)

它有效,但有一些我不喜欢的东西.这是否真的有必要将我的类型处理为可空,或者是否有我缺少的东西?

c# custom-model-binder asp.net-mvc-3

7
推荐指数
2
解决办法
1738
查看次数

Azure VM上的SSD磁盘性能降低

我在D2实例(新的SSD实例)上使用带有Windows Server 2012 Datacenter的Windows Azure虚拟机来解压缩一个1.8 GB的zip文件,该文件包含一个解压缩的51 GB XML文件.毋庸置疑,这个过程可以用快速磁盘加速,这就是我测试D2实例的原因.

但是,我所获得的磁盘性能并不令人印象深刻,并且不符合SSD磁盘的性能预期,因为我的写入速度平均只有20-30 MB/s左右.

我用来解压缩文件的程序是为此唯一目的而开发的自定义.NET控制台应用程序.源代码如下:

static void Main(string[] args)
{
    if (args.Count() < 1)
    {
        Console.WriteLine("Missing file parameter.");
        return;
    }

    string zipFilePath = args.First();
    if (!File.Exists(zipFilePath))
    {
        Console.WriteLine("File does not exist.");
        return;
    }

    string targetPath = Path.GetDirectoryName(zipFilePath);

    var start = DateTime.Now;
    Console.WriteLine("Starting extraction (" + start.ToLongTimeString() + ")");
    var zipFile = new ZipFile(zipFilePath);
    zipFile.UseZip64 = UseZip64.On;
    foreach (ZipEntry zipEntry in zipFile)
    {
        byte[] buffer = new byte[4096];     // 4K is optimum
        Stream zipStream = …
Run Code Online (Sandbox Code Playgroud)

azure azure-virtual-machine

6
推荐指数
1
解决办法
2744
查看次数

如何使用.NET数据注释属性附加自定义HTML属性或CSS类?

我正在使用ASP.NET MVC 3 RTM.是否可以通过使用属性更改从视图模型呈现的HTML?

例:

public class Product
{
    [AddHtmlAttribute(Name = "disabled", Value = "disabled")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望该属性能够更改呈现的HTML,该属性会导致.我知道它不能仅使用属性来完成.我可能必须通过实现一个接口来挂钩系统,但我应该在哪里看?

我知道MVC使用默认的编辑器模板,我在MVC 3源代码中查看了它们,但是我无法弄清楚是否有可能以某种方式挂钩到渲染元素并添加一些属性.我知道验证系统通过添加自定义HTML属性来支持不显眼的验证.

我想我只需要一个指向我应该看的地方的指针,或者我应该看一下什么界面.

非常感谢.

更新:我正在Html.EditorFor(model => model.Name)为我的字段使用标准HTML帮助程序,并且没有覆盖任何编辑器模板.如果我不必更改或覆盖默认模板,我真的更喜欢.

html custom-attributes asp.net-mvc-3

4
推荐指数
1
解决办法
2267
查看次数

使用Entity Framework 4读取数据时如何使用事务?

我正在尝试将Microsoft SQL Server 2008 R2中的SNAPSHOT事务隔离级别与Entity Framework 4.0一起使用.然而,这似乎并不像我最初想的那么容易.

要使用SNAPSHOT隔离级别,必须在数据库中启用它.我做到了.我已经使用SQL Management Studio测试了SNAPSHOT隔离级别在我的数据库上按预期工作.我想使用这个隔离级别,因为我想要一致的读取而不锁定行或整个表.所以我的数据库已准备好让我使用SNAPSHOT隔离级别.到现在为止还挺好.

在我的repro应用程序,这是一个WPF应用程序,我有一个窗口,我从一个表中加载一些数据.每次单击按钮时,我一次加载5行.这是窗口的XAML:

<Window x:Class="EFSnapshotTransactionTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" Name="UC" Closing="UC_Closing">
<DockPanel>
    <Button Click="Button_Click" DockPanel.Dock="Top">Load next 5</Button>
    <ScrollViewer>
        <ListView ItemsSource="{Binding ElementName=UC, Path=ViewModel.Items}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Id" DisplayMemberBinding="{Binding Id}"/>
                    <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Date}"/>
                    <GridViewColumn Header="DocumentNumber" DisplayMemberBinding="{Binding DocumentNumber}"/>
                    <GridViewColumn Header="Amount" DisplayMemberBinding="{Binding Amount}"/>
                    <GridViewColumn Header="Text" DisplayMemberBinding="{Binding Text}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </ScrollViewer>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

这是窗口的代码隐藏:

    public partial class MainWindow : Window
{
    private ViewModel _vm;

    public ViewModel ViewModel
    {
        get { return _vm; }
    }

    public …
Run Code Online (Sandbox Code Playgroud)

sql-server entity-framework transactions snapshot transaction-isolation

0
推荐指数
1
解决办法
2581
查看次数