Viewmodel 没有定义键
Viewmodel has no key defined
我必须以我是视图模型的新手作为开头。话虽这么说,我想创建一个包含付款和订阅信息的视图,例如付款注册页面。我想更新我的 EF 模型中的多个实体,我正计划通过视图模型进行更新。问题是当我尝试根据我的控制器操作创建视图时..我收到此错误:
我的视图模型使用了独立的 class 到 get/post 数据到我的视图...也许我做错了.. 它必须有主键吗?它是否需要在我的数据库中并作为 EF 实体添加? 我该如何解决这个问题?谢谢
这是视图模型代码:
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; }
}
}
Does it have to have a primary key?
没有。视图模型是一个简单的 POCO class。除非您想在 UI/Validation/Business 层中进行一些自定义验证,否则您不需要使用 [Key] 属性装饰任何 属性。
Does it need to be in my db and added as an EF entity?
没有。视图模型的目的是在您的视图和操作方法之间传递数据。您将从一个视图模型对象中读取数据,并根据需要将其保存在 2 个或更多表中。视图模型应该是精简和扁平的,因为它是针对特定视图的。
您看到的错误可能是 visual studio 中的错误。你为什么不手动创建一个动作方法,一个视图(d在向导中的模型select)并更新视图以使用你的视图模型作为model
(如果首先使用代码,或步骤到第二步)首先,您必须检查 ViewModel 使用的模型(实体)(并且您用于直接连接到数据库)其中属性(列)已设置“ [Key]”数据注释.
其次,您必须在ViewModel class 中包含主键属性(列),并在ViewModel class 中为其提供“[Key]”数据注释。
(因为你必须分配一个键让电脑区分每一行。)
第三,重新构建你的整个项目,然后你就可以成功使用内置模板生成视图了。
即使这是一个已回答的旧问题,我认为这可能会有所帮助:
创建视图时(我怀疑在这种情况下是部分视图),删除数据上下文 Class 值。如果已设置,即使您创建的是非 entity framework 视图,Visual studio 也会认为您使用的是 Entity Framework,因此它会抛出该错误。
使用 中的提示,我在创建视图时从 UI 中删除了数据上下文 Class,但它创建了一个没有我的实体字段的视图,这使我的视图模型。因此,我使用具有最多字段的 class 模型重新创建了视图,然后将 @model 变量更改为我的视图模型 class,并更改了每个字段的 FQN。直到现在我都找不到更好的解决方案。必须更改每个字段是一件痛苦的事情。
当您为操作方法创建相应的视图时,请确保将数据上下文 Class 留空。只要擦除它的默认值,你就会摆脱这个错误。
通过选择 Empty (without model)
模板字段的值而不是以下任何一项来创建空视图:
Create
Delete
Details
Edit
List
如果是上述任何一种选择,您需要指定数据上下文 Class 字段的值。所以只需使用 Empty (without model)
选项即可。
does it have to have a primary key?
不一定。这取决于您的要求。
我必须以我是视图模型的新手作为开头。话虽这么说,我想创建一个包含付款和订阅信息的视图,例如付款注册页面。我想更新我的 EF 模型中的多个实体,我正计划通过视图模型进行更新。问题是当我尝试根据我的控制器操作创建视图时..我收到此错误:
我的视图模型使用了独立的 class 到 get/post 数据到我的视图...也许我做错了.. 它必须有主键吗?它是否需要在我的数据库中并作为 EF 实体添加? 我该如何解决这个问题?谢谢
这是视图模型代码:
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; }
}
}
Does it have to have a primary key?
没有。视图模型是一个简单的 POCO class。除非您想在 UI/Validation/Business 层中进行一些自定义验证,否则您不需要使用 [Key] 属性装饰任何 属性。
Does it need to be in my db and added as an EF entity?
没有。视图模型的目的是在您的视图和操作方法之间传递数据。您将从一个视图模型对象中读取数据,并根据需要将其保存在 2 个或更多表中。视图模型应该是精简和扁平的,因为它是针对特定视图的。
您看到的错误可能是 visual studio 中的错误。你为什么不手动创建一个动作方法,一个视图(d在向导中的模型select)并更新视图以使用你的视图模型作为model
(如果首先使用代码,或步骤到第二步)首先,您必须检查 ViewModel 使用的模型(实体)(并且您用于直接连接到数据库)其中属性(列)已设置“ [Key]”数据注释.
其次,您必须在ViewModel class 中包含主键属性(列),并在ViewModel class 中为其提供“[Key]”数据注释。 (因为你必须分配一个键让电脑区分每一行。)
第三,重新构建你的整个项目,然后你就可以成功使用内置模板生成视图了。
即使这是一个已回答的旧问题,我认为这可能会有所帮助: 创建视图时(我怀疑在这种情况下是部分视图),删除数据上下文 Class 值。如果已设置,即使您创建的是非 entity framework 视图,Visual studio 也会认为您使用的是 Entity Framework,因此它会抛出该错误。
使用
当您为操作方法创建相应的视图时,请确保将数据上下文 Class 留空。只要擦除它的默认值,你就会摆脱这个错误。
通过选择 Empty (without model)
模板字段的值而不是以下任何一项来创建空视图:
Create
Delete
Details
Edit
List
如果是上述任何一种选择,您需要指定数据上下文 Class 字段的值。所以只需使用 Empty (without model)
选项即可。
does it have to have a primary key?
不一定。这取决于您的要求。