在部分类中更改LINQ2SQL属性?

时间:2010-04-19 12:37:30

标签: c# linq-to-sql

我的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,这是可能的还是我需要在我的部分类中重写所有上述代码?

3 个答案:

答案 0 :(得分:4)

你可以更容易地在你的部分中编写另一个属性,只是在它的get / set中引用它,然后在你的代码中使用该属性。例如,我将生成的SQL重命名为DayOfWeekStorageDayOfWeekSQL,然后在部分中执行此操作:

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希望它有所帮助!