用户在实体类型MVC5 EF6 [英] User in Entity type MVC5 EF6

查看:140
本文介绍了用户在实体类型MVC5 EF6的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在MVC5中创建了一个类,我想要一个内容的主要所有者,然后我想为这些内容编辑一些编辑器:

  public class Content 
{
public int ID {get;组; }
public IdentityUser Owner {get;组; }
public ICollection< IdentityUser>编辑{get;组; }
public string标题{get;组; }
public string Body {get;组; }
}

在数据库上下文中,我有以下代码:

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

modelBuilder.Entity< Content>()
.HasOptional(c => c.Editors)
.WithRequired()
.WillCascadeOnDelete();

modelBuilder.Entity< Content>()
.HasRequired(c => c.Owner)
.WithOptional()
.WillCascadeOnDelete();
}

我希望微软实现 IdentityUser 对象,这样它可以在其他实体类型中使用,所以我可能会做错事,因为当我尝试为内容实体类型创建一个控制器时,我得到以下错误:

  EntityType'IdentityUserLogin'没有键定义
EntityType'IdentityUserRole'没有定义键
EntityType: EntitySet'IdentityUserLogins'基于没有键定义的类型'IdentityUserLogin'
EntityType:EntitySet'IdentityUserRoles'基于没有键定义的类型'IdentityUserRole'
/ pre>

我还尝试将以下代码添加到 ApplicationDbContext 中,如此问题所述使用asp.net MVC5 EF6中的流畅api映射表

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity< IdentityUserLogin>()。HasKey< string>(l => l.UserId);
modelBuilder.Entity< IdentityRole>()。HasKey< string>(r => r.Id);
modelBuilder.Entity< IdentityUserRole>()。HasKey(r => new {r.RoleId,r.UserId});
}

我必须做错事。请告诉我如何处理我的Content EntityType中的用户。

解决方案

以下方法 OnModelCreating ,将创建​​一个工作上下文。不知道是否是你想要的映射。

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

modelBuilder.Entity< Content>()
.HasMany(c => c.Editors)
.WithOptional()
.WillCascadeOnDelete(false);

modelBuilder.Entity< Content>()
.HasRequired(c => c.Owner)
.WithOptional()
.WillCascadeOnDelete(false);

modelBuilder.Entity< IdentityUserLogin>()。HasKey< string>(l => l.UserId);
modelBuilder.Entity< IdentityRole>()。HasKey< string>(r => r.Id);
modelBuilder.Entity< IdentityUserRole>()。HasKey(r => new {r.RoleId,r.UserId});
}


I have created a class in MVC5, where I want a primary owner of the content and then I want to have some editors for the content:

public class Content
{
    public int ID { get; set; }
    public IdentityUser Owner { get; set; }
    public ICollection<IdentityUser> Editors { get; set; }
    public string Title{ get; set; }
    public string Body { get; set; }
}

In the database context I have the following code:

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

    modelBuilder.Entity<Content>()
        .HasOptional(c => c.Editors)
        .WithRequired()
        .WillCascadeOnDelete();

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete();
}

I would expect Microsoft to have implemented the IdentityUser object in such a way, that it can be used in other entity types, so I am probably doing something wrong, because when I try to make a controller for the Content entity type, I get the following error:

EntityType 'IdentityUserLogin' has no key defined
EntityType 'IdentityUserRole' has no key defined
EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no key defined
EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no key defined

I have also tried to add the following code to the ApplicationDbContext as described in this question Map tables using fluent api in asp.net MVC5 EF6?:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}

I must be doing something wrong. Please tell me how I can handle users in my Content EntityType.

解决方案

The following method, OnModelCreating, will create a working context. Not sure if it is the mapping you want though.

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

    modelBuilder.Entity<Content>()
        .HasMany(c => c.Editors)
        .WithOptional()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}

这篇关于用户在实体类型MVC5 EF6的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆