我一直在寻找DeleteObject方法的定义..但是我找到了一些我不知道的东西。
public class ObjectSet<TEntity> : ObjectQuery<TEntity>, IObjectSet<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>, IQueryable, IEnumerable where TEntity : class
这是命名空间System.Data.Objects中ObjectSet的类定义的签名,任何人都可以解释一下这个定义..我对where TEntity : class
部分更加好奇。
答案 0 :(得分:2)
public class ObjectSet<TEntity> : ObjectQuery<TEntity>, ... where TEntity : class
where TEntity : class
是通用类型约束。在这种情况下,这意味着TEntity
必须是引用类型(因此不能是int
或DateTime
之类的值类型
答案 1 :(得分:1)
type参数必须是引用类型;这也适用于任何 class,interface,delegate或array type。
https://msdn.microsoft.com/en-us/library/d5x73970.aspx
有时候制定此限制很重要,因为您可以使用引用类型执行某些操作,而不能使用值类型。
在这种情况下(实体框架),实体必须是引用类型是合乎逻辑的。如果TEntity
将是一个结构,那么它无法跟踪更改(您将在不同的堆栈中有几个不同的'副本')。
P.S。如果您不理解值和引用类型之间的区别,那么这可能会有所帮助:https://stackoverflow.com/a/5057284/238682