C# Viewmodel没有定义键
我必须先说一句,我对viewmodels非常陌生。这就是说,我想有一个付款和订阅信息的创建视图,像一个付款注册页面。我想更新我的EF模型中的多个实体,我正计划通过viewmodel进行更新。问题是当我尝试基于控制器操作创建视图时。。我得到这个错误: My viewmodel是一个独立类,用于获取/发布数据到My view。。。也许我走错了方向它必须有主键吗?它是否需要在我的数据库中并作为EF实体添加?如何解决此问题?谢谢 以下是viewmodel代码:C# Viewmodel没有定义键,c#,asp.net-mvc,entity-framework,viewmodel,C#,Asp.net Mvc,Entity Framework,Viewmodel,我必须先说一句,我对viewmodels非常陌生。这就是说,我想有一个付款和订阅信息的创建视图,像一个付款注册页面。我想更新我的EF模型中的多个实体,我正计划通过viewmodel进行更新。问题是当我尝试基于控制器操作创建视图时。。我得到这个错误: My viewmodel是一个独立类,用于获取/发布数据到My view。。。也许我走错了方向它必须有主键吗?它是否需要在我的数据库中并作为EF实体添加?如何解决此问题?谢谢 以下是viewmodel代码: using System; using
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MVCProject.DataAccess;
using System.ComponentModel.DataAnnotations;
namespace MVCProject.Models.ViewModel
{
public class PaymentSetupViewModel
{
//Subscription.cs
[Required(ErrorMessage = "required")]
public string Frequency { get; set; }
public DateTime Date { get; set; }
//PaymentMethod.cs
[Required(ErrorMessage = "required")]
[CreditCard]
[Display(Name = "Card Number")]
public string CCNumber { get; set; }
[Required(ErrorMessage = "required")]
[Display(Name = "Card Expiration")]
public DateTime CCExpiration { get; set; }
[Required(ErrorMessage = "required")]
[Display(Name = "CVV2")]
public string CCCVV2 { get; set; }
[Required(ErrorMessage = "required")]
[Display(Name = "Bank Name")]
public string BankName { get; set; }
[Required(ErrorMessage = "required")]
[Display(Name = "Account Number")]
public string BankAccountNumber { get; set; }
[Required(ErrorMessage = "required")]
[Display(Name = "Routing Number")]
public string BankRoutingNumber { get; set; }
[Required(ErrorMessage = "required")]
public string ProductName { get; set; }
//AspNetUser.cs properties -- identity list of logins
public string UserName { get; set; }
//PaymentSubscriptionViewModels.cs properties
public int SelectedValue { get; set; }
}
}
它必须有主键吗
不是。视图模型是一个简单的POCO类。除非您想在UI/验证/业务层中执行一些自定义验证,否则不需要使用[Key]属性装饰任何属性
它是否需要在my db中并作为EF实体添加
不是。视图模型的目的是在视图和动作方法之间传递数据。您将从一个视图模型对象中读取数据,并根据需要将其保存在两个或多个表中。视图模型应该是倾斜和平坦的,因为它是用于特定视图的
您看到的错误可能是visual studio中的错误。为什么不手动创建一个操作方法、一个视图(不要在向导中选择模型)并更新视图以使用视图模型作为模型(如果使用代码第一步或步骤到第二步)首先,您必须检查ViewModel(用于直接连接到数据库)使用的模型(实体)的哪个属性(列)已设置“[Key]”数据批注
其次,必须在ViewModel类中包含主键属性(列),并在ViewModel类中为其提供“[key]”数据注释。
(因为您必须为计算机分配一个键来区分每一行。)
第三,重建整个项目,然后您可以成功地使用内置模板生成视图。即使这是一个老问题,我认为这可能会有所帮助:
创建视图时(在本例中我怀疑是局部视图),请删除数据上下文类值。如果设置了,即使您正在创建一个基于非实体框架的视图,Visual studio也会认为您正在使用实体框架,因此它会抛出该错误。在创建视图时,我使用的提示从UI中删除了数据上下文类,但它创建的视图中没有实体中的字段,这些字段构成了我的viewmodel。因此,我使用字段最多的类模型重新创建了视图,然后将@model变量更改为我的viewmodel类,并更改了每个字段的FQN。直到现在,我还没有找到更好的解决办法。必须更改每个字段是一件痛苦的事情。为操作方法创建相应的视图时,请确保将数据上下文类留空。只需删除它的默认值,就可以消除此错误 通过选择模板字段的empty(无模型)
值而不是以下任何一项来创建空视图:
Create
Delete
Details
Edit
List
在上述任何选择的情况下,您需要指定数据上下文类字段的值。所以只需使用Empty(不带型号)
选项即可
它必须有主键吗
不一定。这取决于你的要求。我可以试试。viewmodel看起来正常吗?请看@Cristian的答案,因为此错误与在构建未绑定到特定EF上下文的视图时选择数据上下文有关。问题是因为选择了数据上下文类。如果这是一个错误,那么它在2021年仍然未修复,原始帖子是从2015年开始的。@mts396的提示似乎有效,但你似乎试图将其与EF联系起来。确保它是一个单独的文件夹(比如说)ViewModels(不在你的models文件夹中)。@StephenMuecke,它在一个单独的项目中