ModelValidationException:名称'AnonymousUID'不能用于'CodeFirstDatabaseSchema.AnonymousUID'类型

And*_*son 3 .net c# orm entity-framework

我正在使用Entity Framework来建模现有数据库.其中一个数据库表包含一个与表AnonymousUID同名的列.

我使用Entity Framework Power Tools函数Reverse Engineer Code First来生成模型类和映射.逆向工程过程自动重命名AnonymousUID类成员(to AnonymousUID1)以避免成员名称与类名相同.生成的模型类因此如下所示:

public partial class AnonymousUID
{
    public string UID { get; set; }
    public string AnonymousUID1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且EF映射构造函数的实现方式如下:

public AnonymousUIDMap()
{
    // Primary Key
    this.HasKey(t => t.UID);

    // Properties
    this.Property(t => t.UID).IsRequired().HasMaxLength(64);
    this.Property(t => t.AnonymousUID1).IsRequired().HasMaxLength(64);

    // Table & Column Mappings
    this.ToTable("AnonymousUID");
    this.Property(t => t.UID).HasColumnName("UID");
    this.Property(t => t.AnonymousUID1).HasColumnName("AnonymousUID");
}
Run Code Online (Sandbox Code Playgroud)

数据库上下文类的实现方式如下:

public partial class MyDbContext : DbContext
{
    // Constructors...

    public DbSet<AnonymousUID> AnonymousUIDs { get; set; }
    ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new AnonymousUIDMap());
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,代码构建没有问题.但是当我尝试访问数据库的任意内容时:

using (var context = new MyDbContext())
{
    var foos = from foo in context.Foos select foo;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是抛出了以下异常:

System.Data.Entity.ModelConfiguration.ModelValidationException : 
One or more validation errors were detected during model generation:

\tAnonymousUID: Name: Name 'AnonymousUID' cannot be used in type
CodeFirstDatabaseSchema.AnonymousUID'. Member names cannot be the 
same as their enclosing type.
Run Code Online (Sandbox Code Playgroud)

显然有一些额外的映射构建正在进行中CodeFirstDatabaseSchema,并且此过程无法避免类/成员名称冲突.

  • 为什么会出现此错误?毕竟,逆向工程程序设法绕过了命名问题.
  • 在不修改已建立的数据库的模式的情况下,有什么方法可以避免抛出此异常?

我在.NET Framework 4项目中使用Nuget的Entity Framework 6.0(预发布).

quj*_*jck 5

正如我在上面的评论中所猜测的那样,将列名更改为以小写'a'开头

...HasColumnName("anonymousUID");
Run Code Online (Sandbox Code Playgroud)

我们希望这是一个预发布缺陷并在RTM中修复;-)