【发布时间】:2016-07-20 13:44:02
【问题描述】:
我正在尝试在我的 C#/MVC/Entity Framework 应用程序上创建一个通用控制器。
public class GenericRecordController<T> : Controller
{
private DbSet<T> Table;
// ...
public action()
{
// ...
db.Entry(T_Instance).State = System.Data.Entity.EntityState.Modified;
}
}
但是DbSet<T> 和 T_Instance 行存在编译器错误。
类型
T必须是引用类型才能用作参数。
当我将它限制为class 时,它就解决了。
Controller where T : class
错误是什么意思?我不是在寻求解决方案,我想了解为什么会发生此错误以及为什么将其限制为 class 可以解决它。
【问题讨论】:
-
不完整且不清楚。此外,这是一个值得商榷的设计选择。
-
@HenkHolterman 。为什么选择糟糕的设计?
-
它使您的控制器面向模型,它们应该面向视图。对 CRUD 来说是不必要的,对所有其他目的都是有害的。
-
T_Instance 从何而来?为什么它与 T 不同?
-
我明白了。这个类是一个父类,只有一些通用方法(列表、删除等)。我的其他控制器类将从这个父类继承。 “class CustomerController : GenericController ...” 所以,我不认为这是一个糟糕的设计。只是避免一些重复的代码。感谢您的建议@HenkHolterman
标签: c# generics controller