我有一个数据库,我使用2种不同的模式。模式就像 namespace (如果我输入错误,请纠正我)。这样,我有1个db,当前有2个模式...因此,可以将1个模式中的表命名为与其他模式中的表相同,因为它们位于单独的模式中。

我如何首先获取EF代码以与其他架构而非默认架构对话?

使用MapSingleType并重写方法是否值得一试?或者我可以做其他事情吗?

非常感谢您的帮助。

最佳答案

您可以实现以下约定:

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);
    }
}

用法:
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"));
}

关于Arthur Vickers here,有一些关于TPT继承和多对多关系的注释。

关于c# - Entity Framework 4 : Code First - Creating db in another schema? MapSingleType?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4841847/

10-13 07:56