tutorial primary modelbuilder many hasforeignkey framework foreign first data code c# entity-framework-4 ef-code-first schema ef4-code-only

c# - primary - Entity Framework 4: Code First-¿Crear db en otro esquema? ¿MapSingleType?



modelbuilder entity framework (3)

Este es un ejemplo de cómo hacer que el marco de la entidad use esquemas de tablas basados ​​en los espacios de nombres de sus modelos. Por ejemplo, si tiene un modelo RiaLib.Data.Models.Membership.User , la tabla db correspondiente se llamará [Membership]. [User] en lugar de [dbo]. [User].

public class DatabaseContext : DbContext { public DbSet<Membership.User> Users { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Conventions.Add(new TableSchemaConvention()); base.OnModelCreating(modelBuilder); } }

https://github.com/rialib/efextensions > TableSchemaConvention.cs

Tengo una base de datos y estoy usando 2 esquemas diferentes. Los esquemas son como espacios de nombres (corríjame si me equivoco). De esta manera tengo 1 db y actualmente 2 esquemas ... así que las tablas en 1 esquema pueden tener el mismo nombre que las tablas en el otro esquema porque están en esquemas separados.

¿Cómo obtengo el código EF primero para hablar con un esquema diferente y no con el esquema predeterminado?

¿Es algo que ver con MapSingleType y reemplazar un método o puedo hacer otra cosa?

Cualquier ayuda realmente apreciada.


No sé acerca del modelo CodeFirst, pero la Anotación de datos para "Tabla" incluye una opción de esquema. Mi código se lee así:

<Table("Product", Schema:="SalesLT")> Public Class Product End Class

Esto me ayudó a lidiar con esquemas alternativos


Puede implementar la siguiente convención:

public class DefaultSchemaConvention : IConfigurationConvention<Type, EntityTypeConfiguration> { string defaultSchema; public DefaultSchemaConvention(string defaultSchema) { if (String.IsNullOrWhiteSpace(defaultSchema)) throw new ArgumentException("defaultSchema"); this.defaultSchema = defaultSchema; } void IConfigurationConvention<Type, EntityTypeConfiguration>.Apply( Type memberInfo, Func<EntityTypeConfiguration> configuration) { EntityTypeConfiguration cfg = configuration(); string tableName = cfg.EntitySetName; if (String.IsNullOrEmpty(tableName)) tableName = memberInfo.Name; cfg.ToTable(tableName, this.defaultSchema); } }

Uso:

protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.Edm.Db.ColumnTypeCasingConvention>(); modelBuilder.Conventions.Add(new DefaultSchemaConvention("TEST")); }

Hay un par de notas laterales de Arthur Vickers here relacionadas con la herencia de TPT y las relaciones de muchos a muchos.