[英]Entity Framework insert FK
我有以下課程:
public class User
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Email { get; set; }
[Required]
public virtual Role Role { get; set; }
}
public class Role
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int RoleId { get; set; }
[Required]
public string RoleName { get; set; }
}
我想插入一個新用戶:
var user = new User()
{
Email = "jhon@gmail.com",
Role = ?
};
db.Users.Add(user);
db.SaveChanges();
如何將RoleId=1
插入為FK
?
我注意到的一件事是用戶類缺少RoleId導航屬性。
如果您不介意將導航屬性添加到您的User類,則可以進行以下更改以實現它。
public class User
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Email { get; set; }
public int RoleId {get;set;}
[Required]
public virtual Role Role { get; set; }
}
現在您可以像這樣插入用戶:
var user = new User()
{
Email = "jhon@gmail.com",
RoleId = db.Roles.Single(r => r.RoleName = "Role_Name").Select(x=>x.RoleId)
};
db.Users.Add(user);
db.SaveChanges();
如果是新角色,則可以為該用戶創建特殊的新角色,例如:
var role = new Role{
RoleName = "Whatever"
}
var user = new User(){
Email = "jhon@gmail.com",
Role = role
}
db.Users.Add(user);
db.SaveChanges();
如果它是現有角色並且沒有導航屬性,則最好從db中獲取角色以具有db實體:
var role = db.Roles.Single(x => x.RoleName == "Whatever");
var user = new User(){
Email = "jhon@gmail.com",
Role = role
}
db.Users.Add(user);
db.SaveChanges();
Identity
選項指定僅在將值首次添加到數據庫時才由數據庫生成該值。 此后,該實體框架將不會將該屬性包括在UPDATE
語句中。
總之,您無需設置RoleId
,只需使用RoleName
創建對象並將其添加到數據庫即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.