2010-11-01 15 views
6

Implementé las plantillas T4 Repository/Unit of Work de Gil Fink para utilizarlas en un proyecto en el que estoy trabajando, mi primer proyecto a gran escala utilizando MVC. Sin embargo, recibo un error que no recibía antes, y no puedo rastrearlo. No sé si es algo con las plantillas, o simplemente un ajuste en algún lugar que he configurado mal, pero estoy perdido ahora mismo. Esperaba que alguien fuera capaz de arrojar algo de luz sobre la situación.MVC3 EF4 POCO Repository/UnitOfWork Error de conexión

Aquí está mi configuración marco:

  • MVC 3 Beta
  • SQL Server 2008 R2
  • Ninject v2.1.0.76
  • EF4 POCO
  • 3 proyectos de la solución: Datos, Entidades y la aplicación MVC.

Estoy haciendo un primer diseño de base de datos y usando EF para crear las clases de POCO, a través del generador de entidades ADO.NET POCO de Microsoft. Luego uso la herramienta T4 para crear el repositorio y los patrones de la unidad de trabajo. Con esa configuración y todas las clases y repositorios generados, los implemento en la aplicación MVC usando Ninject para DI. Estoy usando el método MVC 2 usando una fábrica de controladores en este momento, con planes para cambiarlo más tarde al método IDependencyResolver.

Cuando uso un repositorio de Mock codificado, la aplicación funciona como debería; sin embargo, cuando lo cambio para usar el enlace de IRepository, aparece el siguiente error: "La conexión suministrada no es válida porque contiene insuficiente información de mapeo o metadatos. Nombre del parámetro: conexión " Esto me indica que la cadena de conexión para que EF se conecte a la base de datos es incorrecta, sin embargo, es la cadena predeterminada generada por la plantilla del modelo de datos de la entidad ADO.NET. Quizás también sea algo con la configuración .edmx.

Aquí es mi cadena de conexión (utilizando el diseño de base de datos del empollón Cena mano)

<add name="NerdDinnerEntities" 
connectionString="metadata= 
res://*/Model1.csdl| 
res://*/Model1.ssdl| 
res://*/Model1.msl; 
provider=System.Data.SqlClient; 
provider connection string=&quot;Data Source=Wayne;Initial Catalog=NerdDinner;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" 
providerName="System.Data.EntityClient" /> 

Cualquier persona con cualquier pensamientos/pistas, etc., estaría muy agradecido.

Editar: aquí está el enlace para la plantilla T4 que estoy usando: Repository and Unit of Work T4 Template for Entity Framework

Edit2: El error es algo que ver con la casa que estoy usando DI con la unidad de trabajo. cuando elimino DI, y tengo manualmente las dependencias en los controladores, funciona. Cuando trato de implementar DI, se rompe.

Respuesta

3
res://*/Model1.csdl| 

Ese * es un comodín que le dice a EF "escanear todos los ensambles del recurso". Lo más probable es que este escaneo no encuentre el ensamblaje por la razón que sea.

Cambio * a su nombre de ensamblado:

res://My.Assembly.Name/Model1.csdl| 
+0

En realidad, lo he intentado. Usé .NET Reflector para asegurarme de tener el nombre correcto para el ensamble. Incluso probé una solución "one-shot" de "res: // * /;", pero tampoco funcionó. –

+1

¡Bingo! Esto solucionó mi problema. Gracias @jfar –

1

Si está utilizando NuGet para instalar su dependencia Ninject, le gusta a configurar sus enlaces de DI en NinjectWebCommon.cs. Si cargar sus enlaces DI requiere que se cree una instancia del contexto de Entity Framework, esto sucede demasiado pronto en el ciclo de vida de la aplicación y la aplicación no puede interpretar la cadena de conexión correctamente.

Si crees que esto puede ser lo que te está pasando, see my answer here for more information.

Cuestiones relacionadas