私はカスタムテーブルを作成し、IDを使用しています。このテーブルに行を追加するためのコンテキストもあります。Entity Frameworkの検証エラーを解決するには?
コード:
public class UserRoleAccess
{
[Key]
public string Id { get; set; }
public string UserRoleId { get; set; }
[ForeignKey("Id")]
public virtual ApplicationRole ApplicationRole { get; set; }
public bool IsActive { get; set; }
public string Name { get; set; }
public int UserRoleAccessType { get; set; }
}
DBコンテキスト:
public class UserRoleAccessContext : DbContext
{
public UserRoleAccessContext() : base("DMConnection")
{
Database.SetInitializer<PersonContext>(null);
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
}
public static UserRoleAccessContext Create()
{
return new UserRoleAccessContext();
}
public DbSet<UserRoleAccess> UserRoleAccess { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// IMPORTANT: we are mapping the entity User to the same table as the entity ApplicationUser
//modelBuilder.Entity<IdentityUserLogin>().ToTable("Users").HasKey(e => e.UserId);
}
public DbQuery<T> Query<T>() where T : class
{
return Set<T>();
}
}
バインディング:
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<ApplicationUser>().HasRequired(p => p.Person)
.WithMany(b => b.Users);
modelBuilder.Entity<ApplicationUser>().HasRequired(p => p.Person)
.WithMany(b => b.Users)
.HasForeignKey(p => p.PersonId);
modelBuilder.Entity<UserRoleAccess>().HasRequired(p => p.ApplicationRole)
.WithMany(b => b.UserRoleAccess);
modelBuilder.Entity<UserRoleAccess>().HasRequired(p => p.ApplicationRole)
.WithMany(b => b.UserRoleAccess)
.HasForeignKey(p => p.UserRoleId);
}
public static void CreateUserRoleAccess(string name, int type, string id)
{
var userAccessContext = new UserRoleAccessContext();
var userRoleAccess = new UserRoleAccess();
userRoleAccess.UserRoleId = id;
userRoleAccess.IsActive = true;
userRoleAccess.UserRoleAccessType = type;
userRoleAccess.Name = name;
userAccessContext.UserRoleAccess.Add(userRoleAccess);
}
がエラー:
One or more validation errors were detected during model generation:
Project.Models.IdentityUserRole: : EntityType 'IdentityUserRole' has no key defined. Define the key for this EntityType. IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no keys defined.
私はバインディングどこかをしないのですが、私はどこ把握することはできませんと仮定私はエラーを取得する際にこのコードを実行しますか?
編集: UserRoleAccessクラスが変更されました。私は長い間に文字列からIDを変更し、 私はそれが働いたTSQL
INSERT INTO UserRoleAccess (UserRoleId,IsActive, Name, UserRoleAccessType) VALUES('e5b2e76a-a106-4076-b219-6987411995e7', 1, 'TEST', 1)
でこれを試してみました。イムは、まだ同じエラーを取得しますが、私のアプリケーションからそれを実行している
EDIT 2は が私のバインディングでこれを追加しました:
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
それでも同じ結果
それはあなたのクラス 'Project.Models.IdentityUserRole'キーが定義されていないと言います。クラス定義を表示できますか? –
これは組み込みのクラスです。https://msdn.microsoft.com/en-us/library/dn613252(v=vs.108).aspx – ThunD3eR
[User in Entity type MVC5 EF6]の可能な複製(http: /stackoverflow.com/questions/19913447/user-in-entity-type-mvc5-ef6) –