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(预发布).
正如我在上面的评论中所猜测的那样,将列名更改为以小写'a'开头
...HasColumnName("anonymousUID");
Run Code Online (Sandbox Code Playgroud)
我们希望这是一个预发布缺陷并在RTM中修复;-)
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |