System.Data.Objects中Object set class签名的含义

时间:2015-07-27 09:04:39

标签: c# .net entity-framework

我一直在寻找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部分更加好奇。

2 个答案:

答案 0 :(得分:2)

public class ObjectSet<TEntity> : ObjectQuery<TEntity>, ... where TEntity : class

where TEntity : class是通用类型约束。在这种情况下,这意味着TEntity必须是引用类型(因此不能是intDateTime之类的值类型

答案 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