实现IDbSet时发生编译错误

本文关键字:编译 错误 IDbSet 实现 | 更新日期: 2023-09-27 18:26:48

我正在尝试为特定的对象类型实现IDbSet<>接口,但在尝试实现IDbSet<>.Create<TDerivedEntity>()时遇到了一个似乎不可避免的错误。代码最好地解释了这个问题:

class ProductSet : IDbSet<Product>
{
    public TDerivedEntity Create<TDerivedEntity>() where TDerivedEntity : class, Product
    {
    }
}

这会产生错误

Cannot specify both a constraint class and the ‘class’ or ‘struct’ constraint"

如果我删除约束,我会得到以下错误:

The constraints for type parameter 'TDerivedEntity' of method 'TestEf.ProductSet.Create<TDerivedEntity>()' must match the constraints for type parameter 'TDerivedEntity' of interface method 'System.Data.Entity.IDbSet<TestEf.Product>.Create<TDerivedEntity>()'. Consider using an explicit interface implementation instead.

我确实尝试过使用显式接口实现,这很有效,但如果我不想使用显式界面实现呢?

实现IDbSet时发生编译错误

我发现使用Extension方法扩展T的IDbSet要容易得多。

至于实际问题:

public TDerivedEntity Create<TDerivedEntity>() where TDerivedEntity : Product, new()

我想应该把它修好。