我有一個問題,涉及基於登錄的用戶在SQL數據庫(實體框架)中返回數據行的後勤問題;我主要關注桌面C#應用程序,同時切換到ASP.NET MVC 4,在解決這個問題時我遇到了一些困難(我已經搜索過,沒有一個答案似乎提供了正確的我正在尋找):顯示基於當前登錄用戶的具體數據
我想使用內置到ASP.NET(MVC4)的授權,並允許用戶發佈關於他們的網站(網站類別,網址,年齡等)的數據與表單,並將表單(使用實體框架)存儲到與UserProfile表中的Id相關聯的數據庫(稱爲PrimaryDomainsDb)中。
當用戶點擊一個按鈕來顯示他們的域列表時,我怎麼能讓應用程序拉他們的域列表(相關的數據行),而忽略其他用戶的行?
同樣,我主要是尋找物流和概念(例如使用外鍵)和psuedocode,而不是實際上將一堆代碼餵給我。
如果任何人有任何的最佳做法的想法(即這樣鏈接的用戶配置到PrimaryDomainDb ,並使用EF調用行匹配其ID 這樣將行返回到View),這將是非常感激。
一些示例代碼:
目前,我有我的PRIMARYDOMAIN代碼首先建立這樣的(這不具有指定最小/最大長度等的裝飾):
public class PrimaryDomain
{
public virtual int Id { get; set; }
public virtual string SiteName { get; set; }
public virtual string SiteURL { get; set; }
public virtual SitePlatforms SitePlatform { get; set; }
public virtual decimal? SiteDA { get; set; }
public virtual decimal? SitePA { get; set; }
public virtual string SiteAge { get; set; }
public virtual DateTime? LastStatusUpdate { get; set; }
public virtual string SiteIP { get; set; }
}
我有一個User類與ASP.NET WebSecurity提供的類不同,它看起來像這樣:(另外,我知道「password」不應該是字符串格式,這只是用於初始設置目的 - 我認爲應該可以完全刪除並由WebSecurity處理密碼)。
public class User
{
public virtual int Id { get; set; }
public virtual string Username { get; set; }
public virtual string Password { get; set; }
public virtual string Email { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string MozAccessID { get; set; }
public virtual string MozKey { get; set; }
public virtual decimal AccuountBalance { get; set; }
public virtual PrivateProxy PrivateProxies { get; set; }
public virtual PrimaryDomain PrimaryDomains { get; set; }
}
當使用直接注入牽引的意見我運行一切通過庫中的數據:
public interface IUserDataSource
{
IQueryable<User> Users { get; }
IQueryable<PrimaryDomain> PrimaryDomains { get; }
void Save();
}
這是我userDB的類,它在每次調用的代碼爲IUserDataSource餵養(通過直接注射):
public class UserDb : DbContext, IUserDataSource
{
public UserDb()
: base("DefaultConnection")
{
}
public DbSet<User> Users { get; set; }
public DbSet<PrimaryDomain> PrimaryDomains { get; set; }
IQueryable<User> IUserDataSource.Users
{
get { return Users; }
}
IQueryable<PrimaryDomain> IUserDataSource.PrimaryDomains
{
get { return PrimaryDomains; }
}
void IUserDataSource.Save()
{
SaveChanges();
}
}
這是,例如,我會如何PrimaryDomains模型傳遞給視圖:
public class NetworkController : Controller
{
//
// GET: /Network/
private IUserDataSource _db;
public NetworkController(IUserDataSource db)
{
_db = db;
}
public ActionResult ListDomains()
{
var allDomains = _db.PrimaryDomains;
return View(allDomains);
}
}
但不是從數據源中提取整個PrimaryDomains列表,而是想添加一種方法來引用當前登錄的用戶標識,以使應用程序僅顯示該特定用戶的域,而不是所有域,以及通過表單添加新域以引用用戶標識並將其添加到表中時。
謝謝你的回覆,它確實有助於清理一些東西。我已經編輯了上面的問題來展示一些代碼,並添加了更多關於我正在嘗試做的事情,如果您可以給我一些關於上述代碼的提示,將非常感謝! – drewness
看我更新的帖子 – VsMaX
好的,謝謝你的資源,這個鏈接是非常深入的,我會明天通過它並應用它並報告回來。在那之前,我試圖實現上面提供的所有代碼,但是當將AccountInfo ActionResult添加到控制器時,我按照前面所述裝飾了控制器,但代碼無法解析上下文中的「上下文」和「映射器」。 Users.FirstOrDefault ...&Mapper.Map。)部分。我確信這個錯誤是一個簡單的修復,但我很難過。希望通過明天提供的鏈接可以簡化事情 - 無論如何,感謝您的幫助。 –
drewness