C# 在C中替换自动生成的代码#

C# 在C中替换自动生成的代码#,c#,.net,wpf,C#,.net,Wpf,我目前正在开发一个非常基本的应用程序,它使用Linq到SQL类。我一直在利用自动生成的数据类是“部分的”这一事实,向它们添加新的方法和属性。但是,现在我想实际修改类方法之一中包含的代码,即SendPropertyChanged() 我能看到的最简单的方法是修改自动生成的.designer.cs文件本身中的代码,但我可以看出这是多么危险(因为代码生成器可能会覆盖代码)。有没有其他方法可以让我安全地修改代码 编辑:为什么我想这样做:我想添加一个属性“isDirty”,该属性在任何字段发生更改时设置。

我目前正在开发一个非常基本的应用程序,它使用Linq到SQL类。我一直在利用自动生成的数据类是“部分的”这一事实,向它们添加新的方法和属性。但是,现在我想实际修改类方法之一中包含的代码,即SendPropertyChanged()

我能看到的最简单的方法是修改自动生成的.designer.cs文件本身中的代码,但我可以看出这是多么危险(因为代码生成器可能会覆盖代码)。有没有其他方法可以让我安全地修改代码


编辑:为什么我想这样做:我想添加一个属性“isDirty”,该属性在任何字段发生更改时设置。因为每当一个字段被更改时,它都会调用SendPropertyChanged方法,所以我想我应该将“isDirty=true”放在其中(进行适当的检查)。

不建议更改自动生成的文件,因为显而易见的原因是,每次更改某些内容并且IDE生成这些文件时,它们都会被替换

如果您真的想修改它们,并且因为它们是
分部类
类,您可以将它们重新定义为分部类,或者更好,如果您可以将它们子类化的话


您还可以探索另一个选项,即使用
扩展方法
,这是一种非常简单的方法,可以在不修改类的情况下向类添加功能

这里的想法是将代码添加到*Changing上的
和*Changed
方法中,例如:

partial void OnNameChanged() {
    // my code here
}

您也可以订阅
PropertyChanging
/
PropertyChanged
,但这通常是一种不好的做法(订阅您自己的事件),并且会产生性能开销。

这听起来是个坏主意,每次更新dbml时都会丢失更改。你为什么要更换它?您不能使用其中一个分部方法吗?我想向该类添加一个isDirty属性,该属性将在任何字段更新时设置。我可以[/I]使用onFieldChanged()事件(如果找不到合适的替代方法,我可能会这样做)并将它们添加到分部类中,但这似乎太不雅观了。使用LINQ to SQL也是个坏主意。如果您有选择的话,我建议您切换到更成熟、更受支持的类似ORM的实体框架或nHibernate。L2S不再被开发了。。。它死了。@DanielMann我不打算走那么远,但是NH的+1看看这个问题,
SendPropertyChanging
等的意义在于生成的属性会自动调用它们;添加一个扩展方法不会导致这种情况发生。事实上,On*Changed方法将是我最后的选择。我只是觉得在每个方法调用(对于每个数据库字段)中添加一行代码有点不雅观,因为已经有另一个方法(SendPropertyChanged)也被调用了。