我的LINQ2SQL图表中有一个表,在表JourneyBooking中有一个名为DayOfWeek的列。 designer.cs的定义如下:
[Column(Storage="_DayOfWeek", DbType="TinyInt NOT NULL")]
public int DayOfWeek
{
get
{
return this._DayOfWeek;
}
set
{
if ((this._DayOfWeek != value))
{
this.OnDayOfWeekChanging(value);
this.SendPropertyChanging();
this._DayOfWeek = value;
this.SendPropertyChanged("DayOfWeek");
this.OnDayOfWeekChanged();
}
}
}
我有一个JourneyBooking课程的部分课程。是否可以使用我自己的属性扩展/覆盖上述DayOfWeek属性?
我遇到的问题是DayOfWeek在C#中是0-6,在SQL中是1-7,所以我想我可以覆盖DayOfWeek属性来减去或加1,这取决于它是get还是set,这是可能的还是我需要在我的部分类中重写所有上述代码?
答案 0 :(得分:4)
你可以更容易地在你的部分中编写另一个属性,只是在它的get / set中引用它,然后在你的代码中使用该属性。例如,我将生成的SQL重命名为DayOfWeekStorage
或DayOfWeekSQL
,然后在部分中执行此操作:
public int DayOfWeek
{
get { return DayOfWeekStorage -1; }
set { DayOfWeekStorage = value + 1; }
}
答案 1 :(得分:1)
不,使用LINQ to SQL,没有真正好的方法可以做到这一点。
您可以创建DayOfWeekStorage
属性(如Nick Craver所解释的),将其设为内部属性,并定义新的WeekDay DayOfWeek
属性。当您在LINQ查询中使用此新属性时,甚至会编译。但是,此LINQ查询将在运行时失败,因为LINQ to SQL不知道如何将查询转换为LINQ to SQL。这是LINQ to SQL停止的地方。
当您无意在LINQ查询中使用它时,可以创建新属性(因此不需要基于该属性进行过滤,分组和排序),但是很容易意外地执行此操作并在运行时查找。
答案 2 :(得分:0)
您可以查看此问题/解决方案。我之前问过这类问题:] Problem with interface implementation in partial classes希望它有所帮助!