我有一个问题,涉及基于登录的用户在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