0

我正在使用 ASP.NET MVC 4。

我有这堂课:

namespace Attempt4.Models
{
    public class UsersModel : DbContext
    {
        public UsersModel()
            : base("name=UsersConnection")
        {
        }
       public DbSet<UserProfile> UserProfiles { get; set; }
       public DbSet<Roles> UserRoles { get; set; }
       public DbSet<UsersInRoles> UsersInUserRoles { get; set; }
    }
}

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }      
}

然后是另一个类:

public partial class FskWebInterfaceContext : DbContext
{
    public FskWebInterfaceContext()
        : base("name=FskWebInterfaceContext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<trigger_dest_assoc> trigger_dest_assoc { get; set; }
    public DbSet<ut_AccessLevel> ut_AccessLevel { get; set; }
    public DbSet<ut_Client> ut_Client { get; set; }
    public DbSet<ut_ContactID> ut_ContactID { get; set; }
    public DbSet<ut_destinations> ut_destinations { get; set; }
    public DbSet<ut_DeviceDescription> ut_DeviceDescription { get; set; }
    public DbSet<ut_DeviceType> ut_DeviceType { get; set; }
    public DbSet<ut_event_log> ut_event_log { get; set; }
    public DbSet<ut_GMUTempData> ut_GMUTempData { get; set; }
    public DbSet<ut_Triggers> ut_Triggers { get; set; }
    public DbSet<ut_User> ut_User { get; set; }
    public DbSet<ut_UserAPNdevices> ut_UserAPNdevices { get; set; }
    public DbSet<ut_UserClientLink> ut_UserClientLink { get; set; }
}

现在我需要能够从我的视图中访问这两个数据库上下文。我知道如何只通过一个模型,例如只是 UserProfile。但我需要能够访问这两个类中的所有元素。

我如何将它们从控制器传递到视图。

具体来说,一旦我通过了它们,我如何在视图中单独访问它们?

4

1 回答 1

2

您在问题的评论部分有答案:

从我一直在阅读的内容来看,我需要使用 ViewModel 类。

所以继续定义一个包含必要信息的类。然后在您的控制器操作中填充此模型的属性并将其传递给视图。

例如,假设您想UserProfiles从第一个上下文和ut_GMUTempData第二个上下文访问:

public class MyViewModel
{
    public IList<UserProfile> UserProfiles { get; set; }
    public IList<ut_GMUTempData> GMUTempData  { get; set; }
}

并在您的控制器操作中:

public ActionResult Index()
{
    using (var ctx1 = new UsersModel())
    using (var ctx2 = new FskWebInterfaceContext())
    {
        var model = new MyViewModel();
        model.UserProfiles = ctx1.UserProfiles.ToList();
        model.GMUTempData = ctx2.ut_GMUTempData.ToList();
        return View(model);
    }
}

现在您的视图变成了视图模型的强类型,您可以访问这两个属性:

@model MyViewModel
... you could use both @Model.UserProfiles and @Model.GMUTempData collections

更新:

根据评论部分的要求,您可以在视图中循环浏览用户配置文件:

@model MyViewModel
@foreach (var profile in Model.UserProfiles)
{
    <div>@profile.SomePropertyOfTheUserProfileClassThatYouWantToDisplayHere</div>
}
于 2013-07-16T06:41:43.343 回答