2017-10-04 44 views
0

我是新來的身份框架上新的自定義實體的變化,也許我在做什麼這裏是不是最好的方法,但無論哪種方式,這是我的情景:身份框架2不適

旁「角色」因素,我的應用程序的某些區域應該考慮如果給定的用戶連接到給定的「公司」。

我創建了一個新的實體「公司」(非常簡單,只有Id和Name)和一個關係實體「UserCompany」(與用戶和公司的Id)。我試圖使它與身份框架上角色和用戶之間使用的結構儘可能相似。

在我的ApplicationDbContext中,我添加了DbSets和一些邏輯,例如向用戶添加公司列表。

我面臨的問題是「SaveChanges」不會將更改應用到數據庫。 *編輯:不引發錯誤,SaveChanges()的結果爲「1」。

這裏是我的ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public DbSet<Company> Companies { get; set; } 

    public DbSet<UserCompany> UserCompanies { get; set; } 

    //constructors, etc... 

    public void AddToCompanies(string _userId, params string[] _companyIds) 
    { 
     foreach (var companyId in _companyIds) 
     { 
      UserCompanies.Add(new UserCompany() 
      { 
       UserId = _userId, 
       DataAreaId = companyId 
      }); 
     } 

     int result = this.SaveChanges(); 

    } 

} 

一個示例代碼這裏是我如何映射這個「UserCompany」實體

public class UserCompany 
{ 
    [Key, Column(Order = 1), ForeignKey("ApplicationUser")] 
    public string UserId { get; set; } 
    public virtual ApplicationUser ApplicationUser { get; set; } 

    [Key, Column(Order = 2), ForeignKey("Company")] 
    public string DataAreaId { get; set; } 
    public virtual Company Company { get; set; } 
} 

在我UserAdminController類我創建了一個私人ApplicationDbContext對象負責用於調用這個邏輯。我懷疑在處理兩個不同的上下文來保存這些數據(一個在ApplicationUserManager對象和這個新對象中)的時候存在一些問題,但我不確定這是否真的是問題,或者如果我是在這裏丟失別的東西。

任何幫助,將不勝感激!

+0

你確定這些條目沒有被保存到數據庫嗎?你是否做過手動檢查? – JuanR

+0

嗨胡安,我通過SSMS檢查,數據不存在 –

回答

1

是在UserCompany模型應該是這樣

public class UserCompany 
{ 
    [Key, Column(Order = 1)] 
    public string UserId { get; set; } 

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

    [Key, Column(Order = 2)] 
    public string DataAreaId { get; set; } 

    [ForeignKey("DataAreaId")] 
    public virtual Company Company { get; set; } 
} 

,並檢查您使用TransactionScope,而不是提交。 希望它有幫助!

+0

謝謝,實體的變化做到了! –

+0

沒問題,快樂編碼:) –