0

我正在使用 SimpleMemberShip。这是默认的 UserProfile 模型:

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

我想创建一个模型来跨多个表从数据库中获取所有用户详细信息:

public class GetUserDetail
{
[Key]
[ReadOnly(true)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }

public int RoleId { get; set; }
public string RoleName { get; set; }

[ReadOnly(true)]
public DateTime CreateDate { get; set; }
public DateTime PasswordChangedDate { get; set; }
}

目前似乎是不可能的。我正在尝试在我的网站上填写 WebGrid 以供管理员访问。我确信它可以通过某种方式完成,但也许我以错误的方式去做。

这是我的控制器:

public ActionResult DashBoard()
{
using (var context = new AppContext())
{
return View(context.GetUserDetails.ToList());
}
}

这是我的上下文属性:

// Account Model DB Set...
public DbSet<GetUserDetail> GetUserDetails { get; set; }

如果我将 UserProfile 指定为模型源,我的 WebGrid 就可以工作:

@model List<myApp.Models.UserProfile>

但这不起作用:

@model List<myApp.Models.GetUserDetail>

是否可以实现自定义模型以跨越多个已实现的表?

谢谢你。

4

3 回答 3

3

您将不得不针对您的 dataContext 手动编写查询以检索实体,然后将它们发送到视图。创建一个具有您需要的所有属性的 ViewModel

using (var context = new AppContext())
{
    var userDetailsViewModels = new UserDetailsViewModel
    return View(context.GetUserDetails
                       .Join(dataContext.SomeOtherTable, 
                             u => u.Ut, o => o.UserId, 
                             (u,o) => new UserDetailsViewModel { Name = u.Name, CreatinnDate = o.CreationDate }
                            )
               );
}
于 2013-09-13T10:05:28.773 回答
0

如果你有兴趣了解自定义模型,你可能想看看 ViewModel。mvc中的视图模型是什么

于 2013-09-13T10:02:42.473 回答
0

我在 Parv Sharma 的帮助下完成了这项工作。虽然这个答案只让我走上了正轨,但我的实际解决方案却大不相同。

我添加了一个模型:

public class UserProfileData
{
public int UserId { get; set; }
public string UserName { get; set; }

public DateTime CreateDate { get; set; }
public DateTime LastPasswordFailureDate { get; set; }

public DateTime PasswordChangedDate { get; set; }
}

然后我将此代码添加到控制器中:

using (var context = new AppContext())
{
string sqlcommand = "SELECT UserProfile.UserId, UserProfile.UserName, webpages_Membership.CreateDate, webpages_Membership.LastPasswordFailureDate, webpages_Membership.PasswordChangedDate "
+ "FROM UserProfile CROSS JOIN webpages_Membership CROSS JOIN webpages_UsersInRoles "
+ "WHERE (UserProfile.UserId='1') ";

return View(context.Database.SqlQuery<UserProfileData>(sqlcommand).ToList());
}

在我看来:

@model List<myApp.Models.UserProfileData>


@{
var grid = new WebGrid(Model);
}

@grid.GetHtml()

老实说,我希望这会比这更容易一些。我的问题是角色数据库中的表没有与之关联的模型。

也许其他人可以提供更好的解决方案?

我还需要做一些格式化等等。

于 2013-09-13T12:47:46.817 回答