我想在我的基于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
属性吗?
最重要的是,由于我已经删除了此列的更新检查,我的数据库更新是否正常工作?