向应用程序用户ASP.NET MVC添加其他属性

时间:2017-08-26 09:12:21

标签: c# asp.net-mvc entity-framework ef-code-first

我正在学习ASP.NET MVC 5和EF。我希望每个注册用户都能够创建一个简单的所属项目列表。

所以我在Item文件夹中有一个Model类:

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

如何使用代码优先方法更新数据库,以便用户可以拥有Items表的外键,以便查询属于当前用户的所有项目?

Select * 
From Items 
Where userID = currentUserID

1 个答案:

答案 0 :(得分:1)

您需要将item作为单独的entity(Model),然后与user建立关系。当您使用此方法时,EF将使用它们的关系创建相应的表(一个到多个,即一个用户可以有许多实体)。

以下是它在代码中实现的方式。

项目类

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

   //foreign key
   public int UserId {get; set;}

   //Navigation property 
   public virtual ApplicationUser User{get; set;}
}

应用用户类

public class ApplicationUser : IdentityUser
{
    //Here you can add more properties if you wish to
    public string FirstName{ get; set; }
    public string LastName { get; set; }

    //User-Item relationship (user can have many Items)
    public virtual List<Item> Items { get; set; }
}

然后您必须转到ApplicationDbContext并添加DbSet Item,如下所示

public class ApplicationDbContext : IdentityDbContext<SchedulerUser>
{
    public virtual DbSet<Item> Items { get; set; }

    //some code are excluded for clarity
}

要获取属于该用户的所有项目的列表,您可以使用linq查询

var _db = new ApplicationDbContext();
var Items = _db.Users.Find(UserId).Items.ToList();