无法查看索引用于在MVC中显示数据的操作

时间:2016-01-27 02:40:51

标签: c# entity-framework asp.net-mvc-4

我在两个表中的插入是成功的但我在索引操作上收到错误以显示数据。

模型和视图模型。

查看模型

public class VMUsers
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public string LastName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
}

模型

[Table("tblUsers")]
public class Users
{   
    [Key]
    public int Id { get; set; }
    public string FullName { get; set; }
    public string LastName { get; set; }
}

[Table("tblUserDetails")]
public class UserDetails
{
    [Key]
    public int Id { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }

    public int UserID { get; set; }
}

DBSet

public System.Data.Entity.DbSet<MVCLearning.Models.VMUsers> Combination { get; set; }

指数行动

public ActionResult Index()
    {
        return View(db.Combination.ToList());

    }

获得例外

  

类型&#39; System.Data.Entity.Core.EntityCommandExecutionException&#39;的例外情况发生在EntityFramework.SqlServer.dll中但未在用户代码中处理

     

附加信息:执行命令定义时发生错误。有关详细信息,请参阅内部异常。

不能理解这个内心是什么。

它破坏所以调试部分看到错误也打破了它没有进入View进行调试。

1 个答案:

答案 0 :(得分:2)

您应该做的一件事是在您的实体之间创建导航属性,但首先我想您正在尝试在UserUserDetail之间创建一对一的关系。如果是这种情况,依赖实体的PK(在这种情况下为UserDetail)也应该是您关系的FK。你的模型就是这样:

[Table("tblUsers")]
public class Users
{   
    [Key]
    public int Id { get; set; }
    public string FullName { get; set; }
    public string LastName { get; set; }

    public virtual UserDetail Detail { get; set; }
}

[Table("tblUserDetails")]
public class UserDetails
{
    [Key,ForeignKey("User")]
    public int UserId { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }

    public virtual User User { get; set; }
}

现在必须使用您的实体类型定义上下文中的DBSet<TEntity>属性:

public DbSet<MVCLearning.Models.User> Users { get; set; }
public DbSet<MVCLearning.Models.UserDetail> UserDetails { get; set; }

现在,在您的控制器中,您可以声明一个类似的查询,将结果投射到您的VM类中:

public ActionResult Index()
{
    return View(db.Users.Select(u=>new VMUsers{ Id=u.Id,
                                                FullName=u.FullName,
                                                LastName=u.LastName,
                                                Address2=u.Detail.Address1,
                                                Address1=u.Detail.Address2}));

}