Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尽管定义了键,EntityType没有键定义错误_C#_Asp.net Mvc_Entity Framework_Asp.net Mvc 5_Entity Framework 6 - Fatal编程技术网

C# 尽管定义了键,EntityType没有键定义错误

C# 尽管定义了键,EntityType没有键定义错误,c#,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,我将遵循此处列出的教程: 使用我的VS2015企业IDE 但是,在步骤8中,我右键单击OrderController中的List ActionResult并选择Add View(添加视图),如下所示: 我得到以下错误: 但是在本教程中,他们没有为OrderVM使用密钥。即使我添加了[Key]和正确的使用方法,并且在重建之后,我仍然会得到相同的错误,我完全不知道为什么要使用getter和setter 视图模型: OrderVM 勤务主任 namespace WebAppTest.Models {

我将遵循此处列出的教程: 使用我的VS2015企业IDE

但是,在步骤8中,我右键单击OrderController中的List ActionResult并选择Add View(添加视图),如下所示:

我得到以下错误:

但是在本教程中,他们没有为OrderVM使用密钥。即使我添加了[Key]和正确的使用方法,并且在重建之后,我仍然会得到相同的错误,我完全不知道为什么要使用getter和setter

视图模型: OrderVM

勤务主任

namespace WebAppTest.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;

    [Table("OrderMaster")]
    public partial class OrderMaster
    {
        [Key]
        public int OrderID { get; set; }

        public DateTime OrderDate { get; set; }

        [Column(TypeName = "numeric")]
        public decimal OrderAmount { get; set; }

        [Required]
        [StringLength(100)]
        public string CustomerName { get; set; }

        [StringLength(200)]
        public string CustomerAddress { get; set; }
    }
}
控制器

订单管理员

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebAppTest.Models;
using WebAppTest.ViewModels;

namespace WebAppTest.Controllers
{
    public class OrderController : Controller
    {
        // GET: Order
        //public ActionResult Index()
        //{
        //    return View();
        //}
        public ActionResult List()
        {
            List<OrderVM> allOrder = new List<OrderVM>();

            // here MyDatabaseEntities is our data context
            using (MyModel dc = new MyModel())
            {
                var o = dc.OrderMasters.OrderByDescending(a => a.OrderID);
                foreach (var i in o)
                {
                    var od = dc.OrderDetails.Where(a => a.OrderID.Equals(i.OrderID)).ToList();
                    allOrder.Add(new OrderVM { order = i, orderDetails = od });
                }
            }
            return View(allOrder);
        }
    }
}

以下是架子工检查关键字段的逻辑:

首先查找具有以下条件的所有属性:

属性应该是基元类型,如果不是基元类型,则可以是以下类型之一:字符串、十进制、Guid、DateTime、DateTimeOffset、TimeSpan。 然后尝试根据名称查找密钥:

[Id]属性不区分大小写 [ClassName][Id]属性不区分大小写 尝试根据属性查找密钥:

具有键属性的属性 具有EdmScalarProperty属性且值为EntityKeyProperty=true的属性 具有值为IsPrimaryKey=true的列属性的属性 所以你应该在你的班上有一个符合上述标准之一的文件。 您还应该从order属性中删除[Key],因为复杂类型不能是Key

作为一个选项,您可以将此属性添加到类中:

[Key]
public int OrderID { get; set; }
作为另一个选项,OrderVM类可以如下所示:

public partial class OrderVM
{
    public OrderVM()
    {
        orderDetails = new List<OrderDetails>();
    }

    [Key]
    public int OrderID { get; set; }

    public DateTime OrderDate { get; set; }

    public decimal OrderAmount { get; set; }

    [Required]
    [StringLength(100)]
    public string CustomerName { get; set; }

    [StringLength(200)]
    public string CustomerAddress { get; set; }

    public List<OrderDetail> orderDetails { get; set; }
}

我刚刚遇到了这个问题。我尝试添加[Key],我使用了公共字符串Id{get;set;}。最终的解决办法是我只需要重建我的项目。我想把这个答案留在这里,以防将来有人遇到这个问题

OrderVM是一个视图模型,而不是数据模型-您不应该定义数据上下文类。您不能将复杂对象OrderMaster用作键感谢您的精心解释,如果可以的话,我会给出更多的要点:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebAppTest.Models;
using WebAppTest.ViewModels;

namespace WebAppTest.Controllers
{
    public class OrderController : Controller
    {
        // GET: Order
        //public ActionResult Index()
        //{
        //    return View();
        //}
        public ActionResult List()
        {
            List<OrderVM> allOrder = new List<OrderVM>();

            // here MyDatabaseEntities is our data context
            using (MyModel dc = new MyModel())
            {
                var o = dc.OrderMasters.OrderByDescending(a => a.OrderID);
                foreach (var i in o)
                {
                    var od = dc.OrderDetails.Where(a => a.OrderID.Equals(i.OrderID)).ToList();
                    allOrder.Add(new OrderVM { order = i, orderDetails = od });
                }
            }
            return View(allOrder);
        }
    }
}
[Key]
public int OrderID { get; set; }
public partial class OrderVM
{
    public OrderVM()
    {
        orderDetails = new List<OrderDetails>();
    }

    [Key]
    public int OrderID { get; set; }

    public DateTime OrderDate { get; set; }

    public decimal OrderAmount { get; set; }

    [Required]
    [StringLength(100)]
    public string CustomerName { get; set; }

    [StringLength(200)]
    public string CustomerAddress { get; set; }

    public List<OrderDetail> orderDetails { get; set; }
}