Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
如何解决ASP.NET C#中的类型转换错误?_C#_Entity Framework - Fatal编程技术网

如何解决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
    }