4

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

[Table("Units")]
public class Unit

如果我将表命名为 Unit 则没问题。如果我将表命名为 Units,则找不到它。

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

谢谢你。

4

5 回答 5

3

我就是这样解决的:

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

    modelBuilder.Entity<Unit>().ToTable("Units");
}
于 2014-10-23T20:17:04.377 回答
3

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<Unit>().ForRelational(rb =>
    {
        rb.Table("Units");
    });
}
于 2014-11-19T14:38:52.040 回答
1

Entity Framework 7 正在使用 Fluent API 进行配置。我创建了一个扩展方法,将表名映射到它们的复数形式,目的是重现 EF 6 行为并能够在使用 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()扩展方法。这可能是您正在使用的 Humanizer 或任何其他使您的字符串复数的扩展方法。(我无耻地在我的项目中复制了https://github.com/srkirkland/Inflector/blob/master/Inflector/Inflector.cs,以便能够使用 DNX Core 编译我的项目。)

.Split()部分是处理type.ClrType.Name可以输出诸如IdentityUserRole`1之类的东西。

你可以在你的DbContext

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

    modelBuilder.PluralizeNames();
}

附:这对我有用

于 2015-05-22T12:28:59.453 回答
0

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

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

            builder.Entity<Role>().ForSqlServer().Table("Role");
        }
于 2015-07-29T20:18:07.367 回答
0

您需要在 project.json 中添加“Microsoft.EntityFrameworkCore.Relational”并恢复您的包。.NET 核心被分解成小块以减少内存占用。所以你需要明确告诉你想要什么。

于 2016-10-30T03:47:44.110 回答