Entity Frameworkを使用して既存のデータベースをモデル化しています。データベース テーブルの 1 つに、テーブルと同じ名前の列AnonymousUIDが含まれています。
Entity Framework Power Tools関数のリバース エンジニアリング Code Firstを使用して、モデル クラスとマッピングを生成します。リバース エンジニアリング手順では、メンバー名がクラス名と同じにならないように、AnonymousUID
クラス メンバーの名前を自動的に ( に) 変更します。AnonymousUID1
したがって、生成されたモデル クラスは次のようになります。
public partial class AnonymousUID
{
public string UID { get; set; }
public string AnonymousUID1 { get; set; }
}
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");
}
データベース コンテキスト クラスは次のように実装されます。
public partial class MyDbContext : DbContext
{
// Constructors...
public DbSet<AnonymousUID> AnonymousUIDs { get; set; }
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new AnonymousUIDMap());
...
}
}
これはまったく問題なく、コードは問題なくビルドされます。しかし、データベースの任意のコンテンツにアクセスしようとすると:
using (var context = new MyDbContext())
{
var foos = from foo in context.Foos select foo;
...
}
それにもかかわらず、次の例外がスローされます。
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.
で進行中の追加のマッピング構築が明らかにありCodeFirstDatabaseSchema
、この手順ではクラス/メンバー名の衝突を回避できません。
- なぜこのエラーが発生するのですか? 結局、リバース エンジニアリング手順により、命名の問題を回避することができました。
- 既に確立されているデータベースのスキーマを変更せずに、この例外がスローされないようにする方法はありますか?
.NET Framework 4 プロジェクトで Nuget の Entity Framework 6.0 (プレリリース) を使用しています。