我正在学习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
答案 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();