Entity framework EF 6,代码第一个连接表名称

Entity framework EF 6,代码第一个连接表名称,entity-framework,ef-code-first,naming-conventions,junction,Entity Framework,Ef Code First,Naming Conventions,Junction,我正在EF6中试验自定义命名约定。我有两个表和一个连接表(WebUser、UserRequest、webuserrequest) 我编写了一个函数,应该能够重命名表:从WebUser到WebU用户 private string GetTableName(Type type) { var result = Regex.Replace(type.Name, ".[A-Z]", m => m.Value[0] + "_" + m.Value[1]); return result.

我正在EF6中试验自定义命名约定。我有两个表和一个连接表(WebUser、UserRequest、webuserrequest)

我编写了一个函数,应该能够重命名表:从WebUser到WebU用户

private string GetTableName(Type type)
{
    var result = Regex.Replace(type.Name, ".[A-Z]", m => m.Value[0] + "_" + m.Value[1]);
    return result.ToLower();
}
其应用方式如下:

        modelBuilder.Types()
            .Configure(c => c.ToTable(GetTableName(c.ClrType)));
该函数在除连接表之外的所有表上都工作正常

源模型:

WebUser,UserRequest

结果数据库表:

web用户、用户请求、web用户请求(代替web用户请求)


可以这样设置连接命名约定吗?是否有一种方法可以配置命名对流以处理上述所有连接表(替换所有大写字母并添加“389;”)?

可以通过这种方式添加约定,设置与Entity Framework 6.1中包含的公共映射API的关联。为此,您必须以类似的方式实现IStoreModelConvention接口:

public class JunctionTableConvention : IStoreModelConvention<AssociationType>
{
    public void Apply(AssociationType item, DbModel model)
    {
        var associations = model.ConceptualToStoreMapping.AssociationSetMappings;

        foreach (var association in associations)
        {
            var associationSetEnds = association.AssociationSet.AssociationSetEnds;
            association.StoreEntitySet.Table = String.Format("{0}_{1}",
                GetTableName(associationSetEnds[0].EntitySet.ElementType),
                GetTableName(associationSetEnds[1].EntitySet.ElementType));
        }
    }

    private string GetTableName(EntityType type)
    {
        var result = Regex.Replace(type.Name, ".[A-Z]", m => m.Value[0] + "_" + m.Value[1]);
        return result.ToLower();
    }
}

有一个当之无愧的乐观的朋友!谢谢,伙计,谢谢!最后,这让我能够在Oracle中创建不带引号的表,并与
modelBuilder.Conventions.Add(new JunctionTableConvention());