如何解决ASP.NET C#中的类型转换错误?
这是我的模型如何解决ASP.NET C#中的类型转换错误?,c#,entity-framework,C#,Entity Framework,这是我的模型 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; namespace TheFoody.Models { public class ManageViewModel { public string FirstName { get; set; }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace TheFoody.Models
{
public class ManageViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string Photo { get; set; }
public string Address { get; set; }
public string City { get; set; }
public int PostCode { get; set; }
public string District { get; set; }
public string UserType { get; set; }
public string Status { get; set; }
}
}
这是我的背景
namespace TheFoody.DataAccess
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class TheFoodyContext : DbContext
{
public TheFoodyContext()
: base("name=TheFoodyContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Menu> Menus { get; set; }
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<Restaurant> Restaurants { get; set; }
public virtual DbSet<Restaurant_Type> Restaurant_Type { get; set; }
}
}
但在这里,当我试图编写这部分代码“ManageViewModel user\u to\u update=db.Users.SingleOrDefault(s=>s.email==ManageViewModel.email);”时,它会给我一个突出显示的错误,称为“无法隐式地将类型“TheFoody.DataAccess.user”转换为“TheFoody.Models.ManageViewModel”
我对这个环境非常陌生,我不知道为什么会出现这样的错误。
db.Users
是一个DbSet
,并且SingleOrDefault()
返回一个这样的用户,或者在该电子邮件地址找不到任何用户时返回null
该类的实例无法隐式转换为请求的ManageViewModel
,您需要将其映射:
DataAccess.User user = db.Users.SingleOrDefault(...);
if (user == null)
{
// show error page telling that the POSTed email address is not known
}
ManageViewModel user_to_update = new ManageViewModel
{
FirstName = user.FirstName,
LastName = user.LastName,
// ...
}
return View(user_to_update);
您可以使用AutoMapper以更方便的方式进行映射
虽然您似乎希望使用POST发送的模型更新数据库,但您需要更改逻辑:您需要从收到的manageviewmodel
中分配用户的属性:
// read from database
DataAccess.User user = db.Users.SingleOrDefault(...);
if (user == null)
{
// show error page telling that the POSTed email address is not known
}
// update from POST
user.FirstName = manageviewmodel.FirstName;
user.LastName = manageviewmodel.LastName;
// ...
// persist to database
db.SaveChanges();
这是因为您不能直接将一种类型的用户强制转换为管理视图模型
通过将查询结果分配给类型用户,然后迭代用户类型的属性,并将其分配给ManageViewModel类型的相关属性,可以解决此问题
例如:
User user_to_update = db.Users.SingleOrDefault(s => s.email == manageviewmodel.Email);
if (user != null)
{
var manageViewModel = new ManageViewModel()
manageViewModel.FirstName = user.FirstName;
manageViewModel.LastName = user.LastName;
}
else {
//Manage null exception here
}
…以此类推您不能将“用户”类型分配给“ManageViewModel”类型。您能告诉我们“用户”的定义吗?您必须创建一个函数来检索给定数据模型的VM。如果返回的“用户”为空,则此操作将失败!
User user_to_update = db.Users.SingleOrDefault(s => s.email == manageviewmodel.Email);
if (user != null)
{
var manageViewModel = new ManageViewModel()
manageViewModel.FirstName = user.FirstName;
manageViewModel.LastName = user.LastName;
}
else {
//Manage null exception here
}