如何更改自动实现的属性以使用私有成员变量,同时保持表/列关联不变?

时间:2016-04-13 18:40:57

标签: c# sql linq linq-to-sql automatic-properties

我想在我的基于Windows Phone C#的应用程序中将C#类成员从自动实现的属性(auto-property?)更改为使用私有成员变量。除了类表示数据库表之外,更改很简单。原始类的简化版本如下所示:

[Table]
public class ResourceItem
{
    [Column(IsPrimaryKey=true, IsDbGenerated=true)]
    public long m_ItemId { get; set; }

    [Column(CanBeNull=true)]
    private int? m_Order;
}

多年前的糟糕决定导致我现在需要为m_Order定制一个getter方法。新课程如下:

[Table]
public class ResourceItem
{
    [Column(IsPrimaryKey=true, IsDbGenerated=true)]
    public long m_ItemId { get; set; }

    private int? _order;
    [Column(CanBeNull=true)]
    public int? m_Order 
    {
        set { _order = value; } 
        get { return _order == 999999 ? 0 : _order; }
    }
}

一切正常,当发现不需要的999999值时,代码返回0,这是完全合适的。

原始错误不是问题,也不是关于C#的类的更改。问题是这是一个数据库列。当我使用旧版本的应用程序创建的数据库运行新应用程序时,在数据库中更新此类对象时,会出现“未找到或未找到行”错误。

为什么更新会导致问题?这个类更改不应该保持数据库模式完全不变吗?

使用[Column(CanBeNull=true, UpdateCheck=UpdateCheck.Never)]作为列定义可以消除错误,但我想知道为什么错误首先显示出来。

是否有不同的方法来指定Column属性以避免错误?我应该使用私有成员上的Column属性吗?

最重要的是,由于我已经删除了此列的更新检查,我的数据库更新是否正常工作?

0 个答案:

没有答案