最近在玩Entity Framework。我们通常设计程序的时候,会把数据访问、业务逻辑层和客户应用分开做。所以我也希望将Entity Framework生成的Entities放在一个类库中,再用客户程序去使用这个封装好的类库。结果在客户程序里,使用C#自动回收资源的那个using语句的时候居然会报错:

错误消息是这个Entities类型没有实现IDisposable接口。这显然是不可能的。因为将EF放在单个项目中时,这样写是没有问题的。于是我看了下DiaosFixEnities这个类型:

发现这个类型继承自ObjectContext,再看一下ObjectContext类型:

确实集成了IDisposable。根据C#面向对象的特性,DiaosFixEnities应当已经继承了IDisposable接口,但未毛客户程序还报错说没有继承这个接口呢?

观察发现,ObjectContext这个类,是在System.Data.Objects命名空间下的。而这个命名空间是属于System.Data.Entity程序集的:

#region Assembly System.Data.Entity.dll, v4.0.30319
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Entity.dll
#endregion

所以我试着在客户程序里添加这个程序集的引用:

现在再编译就不会报错了~