mvc 5将第一个用户ID作为外键

时间:2014-01-30 19:56:04

标签: asp.net-mvc ef-code-first code-first asp.net-mvc-5

我有一张桌子:

public class TestModel
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public string Name { get; set; }
}

我希望UserId列是外键,Mvc Membership的用户ID列。 我怎么能做到这一点?

我的IdentityModels:

public class ApplicationUser : IdentityUser
{
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
}

3 个答案:

答案 0 :(得分:20)

添加对ApplicationUser的引用并指定ForeignKey:

public class TestModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    public string UserId { get; set; }
    [ForeignKey("UserId")]
    public ApplicationUser User { get; set; }
}

将新模型添加到DbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<TestModel> TestModels { get; set; }

    /* rest of class */
}

你应该很好(可以减少迁移/数据库更新)。

答案 1 :(得分:0)

我不喜欢在[ForeignKey]中使用TestModel属性的想法。最好使用Fluent API执行此操作。以下是在UserId表中添加TestModel列并添加外键约束的代码:

public class TestModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

public class ApplicationUser : IdentityUser
{
    public virtual TestModel TestModel { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext() : base("DefaultConnection")
    {
    }

    public DbSet<TestModel> TestModels { get; set; }

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

        modelBuilder.Entity<ApplicationUser>()
            .HasOptional(m => m.TestModel)
            .WithRequired(m => m.ApplicationUser)
            .Map(p => p.MapKey("UserId"));
    }
}

答案 2 :(得分:-1)

使用Visual Studio 2015时脚手架可能会遇到错误CS1061,Ater遵循了很好的答案: / ******** /

public class TestModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    public string UserId { get; set; }
    [ForeignKey("UserId")]
    public ApplicationUser User { get; set; }
}

将新模型添加到DbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<TestModel> TestModels { get; set; }

    /* rest of class */
}

/ ******** / 解 删除受影响控制器的控制器和视图, 在DbContext中重命名为 看起来像这样

public class ApplicationDbContext : IdentityDbContext<Users>

重新启动VS,然后重启脚手架。

免责声明:上述解决方案的作者不是仅为某人编辑和发布的。益处