2014-12-25 30 views
2

在mvc 5項目中使用標識。 我有用戶和優惠券模式,更新用戶列表.net標識usermanager

public class ApplicationUser : IdentityUser 
{   
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public int TeamId { get; set; } 
    public int AvatarId { get; set; } 
    public DateTime RegisterationDate { get; set; } 

    public virtual Avatar Avatar { get; set; } 

    public ApplicationUser() 
    { 
     this.Coupons = new HashSet<Coupon>(); 
    } 
    public virtual ICollection<Coupon> Coupons { get; set; } 
} 

public class Coupon 
{ 
    public long Id { get; set; } 
    public string Barcode { get; set; } 
    public DateTime Date{ get; set; }   
    public float Bet { get; set; } 
    public Double Price { get; set; } 
    public bool System { get; set; } 
    public Double TotalGain { get; set; } 
    public int Status { get; set; } 

    public string UserId { get; set; } 
    public virtual ApplicationUser User { get; set; } 

    public virtual CouponDetail CouponDetail { get; set; } 

} 

有用戶和優惠券之間的關係。

我想用UserManager更新用戶優惠券列表。

private void InsertCoupon(Coupon coupon) 
{ 
    var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())); 
    var userId = User.Identity.GetUserId(); 
    if(userId != null){     
     var user = userManager.FindById(userId); 
     user.Coupons.Add(coupon); 
     userManager.UpdateAsync(user); 
    } 

} 

代碼工作,但沒有插入優惠券表上。我如何使用優惠券列表更新用戶?這段代碼返回

回答

1

用戶對象:

var user = userManager.FindById(userId); 

分離用戶。它不包含在EF上下文中。爲了能夠更新對象並且希望將更改反映到數據庫中,應該獲取用戶並在同一個會話中更新它。這會給我們類似的東西:

if(userId != null){     
    var user = context.Users.FirstOrDefault(u => u.UserId = userId) 
    user.Coupons.Add(coupon); 
    userManager.UpdateAsync(user); 
    context.SaveChanges(); 
} 

不要忘記更新後保存更改。通過將用戶對象附加到您的上下文,這應該工作。

使用附加方法

您也可以分離對象附加到上下文對象。就像這樣:

context.Users.Attach(user); 

但我寧願獲取對象,並像在第一個選項提出更新所有在同一會話。

+0

是的,但UserManager使用ApplicationDbContext。選中創建UserManager的失敗代碼行。 –

+0

Your UseManager肯定使用ApplicationDbContext來訪問數據庫。但是它獲取的用戶對象與您用來更新給定用戶的會話不同。所以,你在會話中選擇用戶並在另一個會話中更新它。如果你這樣做,你的更新將永遠不會工作。 –

+0

這是一個常見問題。只需嘗試在同一個ApplicationDbContext會話中更新用戶對象並在更新後調用SaveChanges()。這一定會奏效。 –