我实施了Gil Fink的T4存储库/工作单元模板,用于我正在开发的项目,这是我使用MVC的第一个全面项目。然而,我收到的错误是我以前没有得到的,我无法追踪它。我不知道这是模板的东西,还是我设置错误的设置,但我现在正处于失败状态。我希望有人能够对这种情况有所了解。
这是我的框架设置:
我正在进行数据库优先设计,并使用EF通过Microsoft的ADO.NET POCO实体生成器创建POCO类。然后,我使用T4工具创建存储库和工作模式单元。通过该设置以及生成的所有类和存储库,我使用Ninject for DI将其实现到MVC应用程序中。我此时使用的是一个使用Controller Factory的MVC 2方法,并计划稍后将其更改为IDependencyResolver方法。
当我使用硬编码的Mock存储库时,应用程序可以正常工作,但是当我将其更改为使用IRepository绑定时,我收到以下错误: “提供的连接无效,因为它包含的映射或元数据信息不足。 参数名称:连接“ 这向我表明EF连接到DB的连接字符串不正确,但它是ADO.NET实体数据模型模板生成的默认字符串。也许它也是.edmx设置的东西。
这是我的连接字符串(使用方便的Nerd Dinner数据库布局)
<add name="NerdDinnerEntities"
connectionString="metadata=
res://*/Model1.csdl|
res://*/Model1.ssdl|
res://*/Model1.msl;
provider=System.Data.SqlClient;
provider connection string="Data Source=Wayne;Initial Catalog=NerdDinner;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
任何有任何想法/提示等的人,我都会非常感激。
编辑:这是我正在使用的T4模板的链接: Repository and Unit of Work T4 Template for Entity Framework
EDIT2: 错误与家庭有关我正在使用工作单位的DI。当我删除DI,并在控制器中手动拥有依赖项时,它的工作原理。当我尝试实施DI时,它会中断。
答案 0 :(得分:3)
res://*/Model1.csdl|
*是一个通配符,表示EF“扫描资源的所有程序集”。这种扫描无论出于何种原因都无法找到装配体。
将*更改为您的程序集名称:
res://My.Assembly.Name/Model1.csdl|
答案 1 :(得分:1)
如果您使用NuGet来安装Ninject依赖项,它会喜欢在NinjectWebCommon.cs
中设置DI绑定。如果加载DI绑定需要实例化实体框架上下文,这在应用程序生命周期中发生得太早,应用程序无法正确解释连接字符串。
如果您认为这可能是您正在发生的事情,see my answer here for more information。