如何防止linq-to-sql设计器撤消我的更改

时间:2010-06-16 17:17:52

标签: linq-to-sql

提前感谢您的关注,

我在VS 2008 SP1中遇到了LINQ-2-SQL设计器的问题,这让我很疯狂。我使用Linq2sql作为我的DAL。似乎Linq2sql在第一步加速了编码,但是在特定于表或对象继承的特性中出现了很多问题。

在这种情况下,我有一个类Entity,Linq2sql设计器生成的所有其他实体类都继承自。{/ p>

public abstract class Entity
{
    public virtual Guid ID { get; protected set; }
}

public partial class User : monius.Data.Entity
{
}

以下由L2S设计师(DataModel.designer.cs

生成
[Column(Storage = "_ID", AutoSync = AutoSync.OnInsert, DbType = "UniqueIdentifier NOT NULL", 
IsPrimaryKey = true, IsDbGenerated = true, UpdateCheck = UpdateCheck.Never)]
[DataMember(Order = 1)]
public System.Guid ID
{
    get
    {
        return this._ID;
    }
    set
    {
        if ((this._ID != value))
        {
            this.OnIDChanging(value);
            this.SendPropertyChanging();
            this._ID = value;
            this.SendPropertyChanged("ID");
            this.OnIDChanged();
        }
    }
}

当我编译代码时,VS警告我

警告1'User.ID'隐藏继承的成员'Entity.ID'。要使当前成员覆盖该实现,请添加override关键字。否则,请添加新关键字。

警告很明显,我必须将L2S设计器生成的代码(DataModel.designer.cs)更改为

[…]
public override System.Guid ID
{
…
    protected set
…
}

编译的代码没有错误或警告,每个人都很高兴。但这不是故事的结局。 一旦我对图表的实体(dbml)进行了更改,甚至我打开dbml文件来查看它,我对设计师手动进行的任何更改都已经消失了并且POOF!重做。这是一项痛苦的工作。

现在我想知道是否有办法迫使L2S设计师不要改变自动生成代码的部分。

如果有人帮我解决这个问题,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

我认为提问者现在已经克服了这个问题。但我会添加一个答案,为其他人的利益,就像我一样,用谷歌搜索这篇帖子。

如果您需要在linqToSql生成的属性上使用override修饰符;

1) open the dbml
2) right click and select properties on the Property you wish to add the override (or virtual, new or new virtual) keyword
3) change the Inheritance Modifier property to what you desire.

答案 1 :(得分:0)

如果您的所有基类都是:

public abstract class Entity 
{ 
    public virtual Guid ID { get; protected set; } 
}

...那么为什么不把它变成一个界面呢?

或者,您可能希望使用Damien Guard的T4模板来自定义代码生成器的输出:http://l2st4.codeplex.com/