将可空字段装饰为代码的第一个Linq to SQL的非可空属性

时间:2014-03-05 10:56:56

标签: c# vb.net linq-to-sql

我将Linq to SQL属性添加到预先存在的类中(更改属性的数据类型将是一个重大变化)我确实认为指定ColumnAttribute的存储参数会指示Linq to SQL位直接与支持字段进行交互,所以我期望类似下面的东西工作:

Private _foo As Integer? = 0
<Column(CanBeNull:=True, DbType:="INT", Name:="FooBar", Storage:="_foo")> _
<DefaultValue(0)> _
Public Property Foo() As Integer
    Get
        Return If(_foo.HasValue, _foo.Value, 0)
    End Get
    Set(ByVal Value As Integer)
        _foo = If(Value = 0, New Integer?(), Value)
    End Set
End Property

给它一个旋转,用一个基本的:

MyThing target = (from u in context.MyThings select u).First();

我发现这失败了:

  

System.InvalidOperationException:无法将null值分配给System.Int32类型的成员,该类型是不可为空的值类型。

那么,是否可以将现有代码标记为使用Linq to SQL而不进行重大更改,或者是否必须为LINQ to SQL版本添加重复属性?

1 个答案:

答案 0 :(得分:-2)

...试

If(IsNothing(_foo), 0, _foo.Value)