2014-05-06 34 views
3

在MVC 5中,模型文件夾中有一個新的Identity Class。因此,讓我們說,我添加一些附加字段的用戶,我會做這樣的類MVC5 DataContext最佳實踐?

public class ApplicationUser : IdentityUser

好了,到目前爲止,一切順利。我運行add-migration "updatedUser"並且會更新數據庫。

但是...現在我想添加一個產品,客戶和公司表。現在,一些ASP.NET教程和Azure的教程,反倒讓我設置getter和setter每個表的ApplicationDbContext類中:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 

     public DbSet<Product> Products { get; set; } 
     public DbSet<Client> Clients { get; set; } 
     public DbSet<Company> Companies { get; set; } 

     public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

但我想你不會想從IdentityDbContext繼承,而是設置一個模型文件夾內的文件名爲:

DatabaseContext.cs(對於非用戶/身份表)

,並完成類似:

using MyProject.Domain.Entities; 
    using System.Data.Entity; 
    namespace MyProject.Models { 

    public class DatabaseContext : DbContext 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<Product> Products { get; set; } 
    public DbSet<Client> Clients { get; set; } 
    public DbSet<Company> Companies { get; set; } 
} 

這是最佳實踐還是應該使用身份類?有關係嗎?

回答

2

你爲什麼會認爲你會這麼做?

由於提供了ApplicationDbContext,您不會繼承任何您尚未執行的操作。

添加第二個方面可能是有意義的在某些情況下,但機會是你將要訪問的標識字段,如果你使用的是不同的環境,那麼你可以運行與上下文一致性問題。

而且,僅供參考,您不要將您的DbSet放在ApplicationDbContext的構造函數中。

+1

那麼你的位置大部分時間只需要一個數據上下文? –

+0

是的,這只是一個錯字,修正了它。我有點理解你說的話。但我仍然有點困惑。我繼續使用ApplicationDBContext來處理新表,並且很可能我想要訪問標識字段。但我並沒有考慮不能從另一個環境訪問它們。現在我想到了這很有意義。我只是有點困惑與已經改變了過去幾年在身份做事的所有新方法洛爾大的變化 –

+0

@RobertHarvey(周?)(雖說我們可以看到更好!) - 我不會去那麼遠。但是,我會說,如果你不知道爲什麼你需要不止一種背景,你可能不需要。兩個最大的原因是1)如果你想把你的應用程序數據放在一個單獨的數據庫中,或者2)如果你有一大堆的表 –