C# 我们如何在泛型上假设布尔属性<;T>;类,其中T是自动生成的LINQ2SQL类
我正在WPF应用程序中对数据库生成的类(使用LINQ2SQL)执行CRUD操作。我的所有数据库表都有IsDelete属性存在。因此,我想定义一个抽象/接口类来执行SoftDelete()。我这里的问题是,如何定义泛型类以访问T.IsDelete=true?或者在代码中,我想做如下的事情C# 我们如何在泛型上假设布尔属性<;T>;类,其中T是自动生成的LINQ2SQL类,c#,wpf,linq,linq-to-sql,generics,C#,Wpf,Linq,Linq To Sql,Generics,我正在WPF应用程序中对数据库生成的类(使用LINQ2SQL)执行CRUD操作。我的所有数据库表都有IsDelete属性存在。因此,我想定义一个抽象/接口类来执行SoftDelete()。我这里的问题是,如何定义泛型类以访问T.IsDelete=true?或者在代码中,我想做如下的事情 public abstract class CRUDOperations <T> : where T is???? { ....... protected virtual SoftDelete
public abstract class CRUDOperations <T> : where T is????
{
.......
protected virtual SoftDelete()
{
T.IsDeleted = true;
}
}
公共抽象类CRUDOperations:其中T是????
{
.......
受保护的虚拟软删除()
{
T.IsDeleted=true;
}
}
其中T是由LINQ到SQL(DBML)生成的DB表类,我不能在其上强加接口或基类?。或者数据库中是否有一种技术可以使基表具有与C#相同的基/派生概念?数据库生成的类不是从实体派生的吗?1)定义ISoftDelete
public interface ISoftDelete
{
bool IsDeleted { get; set; }
}
2) 为所有实体创建分部类
public partial class MyLinqEntity : ISoftDelete { }
public partial class MyOtherLinqEntity : ISoftDelete { }
public partial class MyFurtherLinqEntity : ISoftDelete { }
3) 将接口添加到泛型类型限制
public abstract class CRUDOperations <T> : where T is ISoftDelete
公共抽象类CRUDOperations:其中T是ISoftDelete
您可以在界面上声明:
public interface ICanDelete {
bool IsDeleted {get;set;}
}
让隐式接口实现发挥它的魔力。然后问题变成了:“如何让它知道我的实体实现了这个接口?”。两种选择:
- 为每个实体(在不同的文件中)添加分部类:
- 编辑dbml以将此接口指定为基类:
<Database EntityBase="Some.NameSpace.ICanDelete" ... >
这就是我在MyTableClass中看到的:INotifyPropertyChanging,INotifyPropertyChangedSounds,比如EF;问题是LINQ to SQLThank,看起来像是一个解决方案,但是Step2对我所有的Table类来说都是一项巨大的工作,对吗?是的。在设计器中还有其他方法可以做到这一点,但我更喜欢这种方法,因为我可以使用所有这些部分来修改实体。此外,如果我不得不放弃DBML并重新开始(发生的事情比我希望的要多),我就不必重做所有的定制工作。IIRC,你不能在设计器中这样做-你必须手工编辑DBML。<Database EntityBase="Some.NameSpace.ICanDelete" ... >
where T : ICanDelete