首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体类型MVC5 EF6中的用户

实体类型MVC5 EF6中的用户
EN

Stack Overflow用户
提问于 2013-11-12 02:40:23
回答 2查看 29.1K关注 0票数 49

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

代码语言:javascript
复制
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; }
}

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

代码语言:javascript
复制
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对象,这样它就可以在其他实体类型中使用,所以我可能做错了什么,因为当我尝试为Content实体类型创建控制器时,我得到以下错误:

代码语言:javascript
复制
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

我还尝试按照这个问题Map tables using fluent api in asp.net MVC5 EF6?中的描述将以下代码添加到ApplicationDbContext

代码语言:javascript
复制
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中处理用户。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 05:57:35

下面的方法OnModelCreating将创建一个工作上下文。不过,我不确定这是否是您想要的映射。

代码语言:javascript
复制
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 });
}
票数 61
EN

Stack Overflow用户

发布于 2014-07-07 17:48:26

我也有同样的问题,我发现我没有打电话

代码语言:javascript
复制
 base.OnModelCreating(modelBuilder);

在我的DbModel

票数 104
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19913447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档