Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 找不到表的复数形式_Entity Framework_Linq To Entities_Entity Framework Core - Fatal编程技术网

Entity framework 找不到表的复数形式

Entity framework 找不到表的复数形式,entity-framework,linq-to-entities,entity-framework-core,Entity Framework,Linq To Entities,Entity Framework Core,出于某种原因,code first EF7(vNext)不会使用/查找my table的复数形式。我已经尝试将table属性添加到模型中,但它没有解决问题 [Table("Units")] public class Unit 如果我给表单位命名,那就没问题了。如果我命名了表单位,那么它就找不到了 我做错了什么或错过了什么 谢谢。我就是这样决定的: protected override void OnModelCreating(ModelBuilder modelBuilder) { b

出于某种原因,code first EF7(vNext)不会使用/查找my table的复数形式。我已经尝试将table属性添加到模型中,但它没有解决问题

[Table("Units")]
public class Unit
如果我给表单位命名,那就没问题了。如果我命名了表单位,那么它就找不到了

我做错了什么或错过了什么


谢谢。

我就是这样决定的:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Unit>().ToTable("Units");
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().ToTable(“单位”);
}

对于Entity Framework 7 beta1,我通过以下方式解决了这个问题:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<Unit>().ForRelational(rb =>
    {
        rb.Table("Units");
    });
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().ForRelational(rb=>
{
rb.表格(“单位”);
});
}

正在使用Fluent API配置实体框架7。我创建了一个扩展方法,将表名映射为复数形式,目的是重现EF6行为,并能够在使用EF7时使用现有数据库

public static class ModelBuilderExtensions
{
    public static void PluralizeNames(this ModelBuilder modelBuilder)
    {
        var types = modelBuilder.Model.EntityTypes;

        foreach (var type in types.Where(type => type.ClrType != null))
        {
            modelBuilder.Entity(type.ClrType)
                        .ForRelational()
                        .Table(type.ClrType.Name.Split('`')[0].Pluralize());
        };
    }
}
请注意
.Pluralize()
扩展方法。这可能是您正在使用的人化程序或任何其他使字符串复数化的扩展方法。(为了能够用DNX核心编译我的项目,我无耻地复制了我的项目。)

.Split()
部分用于处理
type.ClrType.Name
,它可以输出像IdentityUserRole`1这样的内容

您可以在
DbContext
中这样使用它:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.PluralizeNames();
}

聚苯乙烯;这对我很有用

现在,在EF7的beta5中,ToTable和ForRelational都缺失了。所以我使用了下面的代码

       protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);

            builder.Entity<Role>().ForSqlServer().Table("Role");
        }
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
builder.Entity().ForSqlServer().Table(“角色”);
}
您需要在project.json中添加“Microsoft.EntityFrameworkCore.Relational”并还原包。
NET内核被分解成小块,以减少内存占用。因此,您需要明确地说出您想要什么。

您使用的是任何fluent API配置吗?@DavidG尽可能通过OnModelCreating no。我认为属性可能尚未实现,请尝试使用fluent APIinstead@ErikEJ据我所知,我可能不知道,fluent api是在OnModelCreating覆盖中操作的。但是,这不再是EF7中的方法。您是否包含正确的引用和名称空间:我很好奇,我遇到了一个非常类似的问题,您的解决方案似乎不起作用,因为ToTable不存在。你是如何做到这一点的?