2011-06-05 24 views
12

Nos encontramos con un pequeño problema al implementar una aplicación web en otro entorno. Creamos la base de datos de la aplicación usando el primer enfoque del Entity Framework Code (db automatic created from Model). En este entorno de desarrollo, estamos utilizando seguridad integrada y las tablas se crean bajo el usuario dbo. Las tablas son como
          [dbo]. [MyTable]código de entidad de entidad primero y usuario de base de datos

Para nuestro otro entorno, que utiliza la autenticación de nombre de usuario/contraseña de la base de datos. Configuramos las tablas y las creamos en la base de datos. Por lo que ahora se denominan como
          [myDbUser]. [MyTable]

Cuando se ejecuta la aplicación, nos encontramos siempre el problema
          objeto no válido nombre 'dbo. mi mesa'.

parece que el código todavía está tratando de buscar una mesa de DBO, que no está presente y por lo tanto falla.

¿Alguien puede arrojar algo de luz sobre este problema? ¿De dónde obtiene Entity Framework este prefijo dbo?

Gracias

Respuesta

17

Especificar esquema explícitamente:

[Table("Users", Schema = "dbo")] 
public class User { .. } 

O especificar esquema de db por defecto para el usuario - 'dbo'

+0

y cómo habría que hacerlo en Fluido ?? (sin los atributos) – Ronald

+0

Littlefool, anula OnModelCreación de la clase de contexto de la base de datos y especifique las asignaciones allí. Aquí hay un ejemplo: http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx –

+0

Lo intenté. Lo único es que cuando depuro veo que el código nunca viene en el método OnModelCreating. Tengo la impresión de que está obteniendo el modelo de una fuente en caché. – Ronald

0

me encontré con este tema recientemente, así como apoyamos varios esquemas diferentes con el mismo modelo Lo que básicamente se me ocurrió fue pasar el nombre del esquema a las clases/métodos que mapean el modelo. Entonces, por ejemplo, las subclases EntityTypeConfiguration toman el nombre de esquema como un argumento constructor, y lo pasan junto con la cadena codificada a ToTable().

ver aquí para una explicación más detallada: https://stackoverflow.com/a/14782001/243607

1

Para especificar el esquema de fluidez

protected override void OnModelCreating(DbModelBuilder modelBuilder) 

modelBuilder.Entity<ClassName>().ToTable("TableName", "SchemaName"); 
+0

¿Funcionará eso con una vista sql? – JQuery

Cuestiones relacionadas