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

Linq to sql 如何防止linq到sql设计器撤消我的更改,linq-to-sql,Linq To Sql,提前感谢您的关注 在VS2008SP1中,我遇到了一个与LINQ-2-SQL设计器有关的问题,这让我发疯。我使用Linq2sql作为DAL。Linq2sql似乎在第一步加快了编码速度,但在特性方面出现了很多问题,特别是在表或对象继承方面 在本例中,我有一个类Entity,由Linq2sql设计器生成的所有其他实体类都从该类继承 public abstract class Entity { public virtual Guid ID { get; protected set; } }

提前感谢您的关注

在VS2008SP1中,我遇到了一个与LINQ-2-SQL设计器有关的问题,这让我发疯。我使用Linq2sql作为DAL。Linq2sql似乎在第一步加快了编码速度,但在特性方面出现了很多问题,特别是在表或对象继承方面

在本例中,我有一个类
Entity
,由Linq2sql设计器生成的所有其他实体类都从该类继承

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

public partial class User : monius.Data.Entity
{
}
以及L2S设计器生成的以下内容(
DataModel.designer.cs

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

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

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

代码编译时没有错误或警告,大家都很高兴。但这并不是故事的结局。 一旦我对图的实体(dbml)进行了更改,甚至打开了dbml文件来查看它,我对designer所做的任何手动更改都已消失,并发出砰的一声!重做一次。那是一份痛苦的工作

现在我想知道是否有办法强迫L2S设计器不更改自动生成代码的部分


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

如果您的基类所做的只是:

public abstract class Entity 
{ 
    public virtual Guid ID { get; protected set; } 
}
…那为什么不把它变成一个接口呢


或者,您可能希望研究使用Damien Guard的T4模板来定制代码生成器的输出:

我想提问者现在已经解决了这个问题。但我会补充一个答案,为了其他人的利益,像我一样,用谷歌搜索到了这篇文章

如果需要在linqToSql生成的属性上覆盖修饰符

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.
PLINQO(PLINQO.com)也是一个伟大的开源解决方案,它将保留您的自定义更改。
public abstract class Entity 
{ 
    public virtual Guid ID { get; protected set; } 
}
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.