Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.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# 类型为';System.Data.Entity.Infrastructure.DbUpdateException';发生_C#_Asp.net Mvc_Entity Framework_Asp.net Web Api_Ef Code First - Fatal编程技术网

C# 类型为';System.Data.Entity.Infrastructure.DbUpdateException';发生

C# 类型为';System.Data.Entity.Infrastructure.DbUpdateException';发生,c#,asp.net-mvc,entity-framework,asp.net-web-api,ef-code-first,C#,Asp.net Mvc,Entity Framework,Asp.net Web Api,Ef Code First,我在尝试向数据库插入条目时遇到此错误。我可以手动对数据进行种子设定,但当我在Web API中调用POST方法时,我会出现此错误 这是我的用户实体类: namespace YourTime.DataAccess.UserEntities { [Table("Users")] public class UserProfile { [Key] public int UserId { get; set; } public s

我在尝试向数据库插入条目时遇到此错误。我可以手动对数据进行种子设定,但当我在Web API中调用POST方法时,我会出现此错误

这是我的用户实体类:

    namespace YourTime.DataAccess.UserEntities
{
    [Table("Users")]
    public class UserProfile
    {
        [Key]
        public int UserId { get; set; }
        public string Activities { get; set; }
        public DateTime Birthday { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FavoriteMusic { get; set; }
        public bool Verified { get; set; }
        public string Gender { get; set; }
        public string Email { get; set; }
        public DateTime UpdatedTime { get; set; }
        public string Hometown { get; set; }
        public virtual CoverPhoto Cover { get; set; }
        public virtual ICollection<Status> Statuses { get; set; }
        public virtual ICollection<Event> Events { get; set; }

    }
}
模型工厂类将实体来回转换为模型。下面是ModelFactory类的代码

    namespace YourTime.DataAccess.Repositories
{
    public interface IModelFactory
    {
        UserModel Create(UserProfile user);

        UserProfile Create(UserModel userModel);

    }
    public class ModelFactory : IModelFactory
    {

        public UserModel Create(UserProfile user)
        {
            return new UserModel
            {
                FirstName = user.FirstName,
                Birthday = user.Birthday!=null? user.Birthday:DateTime.Now,
                Email = user.Email,
                Gender = user.Gender,
                UserId = user.UserId,
                LastName = user.LastName,
                StatusCount = user.Statuses!=null? user.Statuses.Count:0,
                UpdatedTime = user.UpdatedTime!=null? user.UpdatedTime:DateTime.Today,
                Verified = user.Verified!=null? user.Verified:true
            };
        }


        public UserProfile Create(UserModel user)
        {
            return new UserProfile
            {
                UserId = user.UserId,
                FirstName = user.FirstName,
                Email = user.Email,
                Gender = user.Gender,
                LastName = user.LastName
            };
        }
    }
}    
最后是我的API控制器类:

    namespace YourTime.Controllers
{
    public class UserController : ApiController{
    private IWebService _service;
        private IModelFactory _modelFactory;

        public UserController(  ) {
            _service = new WebService( );
            _modelFactory = new ModelFactory( );
        }

        public IHttpActionResult Get( ) {
            var users = _service.Users.Get( );
            var models = users.Select( _modelFactory.Create );

            return Ok( models );
        }

        public IHttpActionResult Get( int id ) {
            try {
                var user = _service.Users.Get( id );
                var model = _modelFactory.Create( user );

                return Ok( model );
            } catch ( Exception ex ) {
                //Logging
#if DEBUG
                return InternalServerError( ex );
#endif
                return InternalServerError( );
            }

        }

        public IHttpActionResult Post([FromBody]UserModel userModel ) {
            var userEntity = _modelFactory.Create( userModel );
            var user = _service.Users.Insert( userEntity );

            var model = _modelFactory.Create( user );
            return Created(string.Format("http://localhost:52962/api/user/{0}", model.UserId), model);
        }
    }
}
我在“_context.SaveChanges()”处遇到错误。我从body传入3个参数,FirstName、LastName和UserId。Rest设置为默认值。你知道会有什么问题吗

编辑:

我的种子代码如下所示:

    namespace YourTime.DataAccess.Repositories
{
    public abstract class Repository<T>: IRespository<T> where T : class
    {
        private readonly YourTimeProjectContext _context;

        protected Repository(YourTimeProjectContext context)
        {
            _context = context;
        }

        public virtual List<T> Get()
{
    return _context.Set<T>().ToList();
}

public  virtual T Get(int id)
{
    return _context.Set<T>().Find(id);
}

public virtual T Update(T obj)
{
    _context.Entry(obj).State = EntityState.Modified;
    _context.SaveChanges();
    return obj;
}

public virtual T Insert(T obj)
{
    _context.Set<T>().Add(obj);
    _context.SaveChanges();
    return obj;
}

public virtual int Delete(T obj)
{
    _context.Set<T>().Remove(obj);
    _context.SaveChanges();
    return _context.SaveChanges();
}

internal object Insert(object UserEntity)
{
    throw new System.NotImplementedException();
}
    }
}
var status = new Status { Message = "Hello. This is a test", UpdateTime = DateTime.Now };
        var user1 = new UserProfile { FirstName = "Federica", LastName = "Fenu", Birthday = DateTime.Parse("9/10/1991"), UpdatedTime = DateTime.Now, Gender = "Male", Email = "gmujtaba_2005@hotmail.com", Statuses = new List<Status> { status } };
        var user2 = new UserProfile { FirstName = "Joe", LastName = "Goddard", Birthday = DateTime.Parse("9/10/1991"), UpdatedTime = DateTime.Now, Gender = "Male", Email = "gmujtaba_2005@yahoo.com", Statuses = new List<Status> { status } };
        context.UserProfiles.Add(user1);
        context.UserProfiles.Add(user2);
var status=newstatus{Message=“你好,这是一个测试”,UpdateTime=DateTime.Now};
var user1=newuserprofile{FirstName=“Federica”,LastName=“Fenu”,Birthday=DateTime.Parse(“9/10/1991”),updatetime=DateTime.Now,Gender=“Male”,Email=“gmujtaba_2005@hotmail.com,status=新列表{status};
var user2=newuserprofile{FirstName=“Joe”,LastName=“Goddard”,生日=DateTime.Parse(“9/10/1991”),updatetime=DateTime.Now,Gender=“Male”,Email=“gmujtaba_2005@yahoo.com,status=新列表{status};
context.UserProfiles.Add(user1);
context.UserProfiles.Add(user2);
下面是webservice类:

    namespace YourTime.DataAccess.Repositories
{
    public class WebService: IWebService
    {
        private Repository<UserProfile> _users;
        private Repository<Status> _statuses;
        private Repository<Video> _videos;
        private Repository<Event> _events;
        private Repository<CoverPhoto> _coverphotos;

        public Repository<UserProfile> Users
        {
            get
            {
                if (_users == null)
                    _users = new UserRepository(new YourTimeProjectContext());

                return _users;
            }
        }

        public Repository<Status> Statuses
        {
            get
            {
                if(_statuses==null)
                    _statuses = new StatusRepository(new YourTimeProjectContext());

                return _statuses;
            }

        }

        public Repository<Video> Videos
        {
            get
            {
                if(_videos==null)
                    _videos = new VideoRepository(new YourTimeProjectContext());

                return _videos;
            }
        }

        public Repository<Event> Events
        {
            get
            {
                if(_events==null)
                    _events = new EventRepository(new YourTimeProjectContext());

                return _events;
            }
        }

        public Repository<CoverPhoto> CoverPhotos
        {
            get
            {
                if(_coverphotos == null)
                    _coverphotos = new CoverPhotoRespository(new YourTimeProjectContext());

                return _coverphotos;
            }
        }
    }
}
namespace YourTime.DataAccess.Repositories
{
公共类Web服务:IWebService
{
私有存储库用户;
私有存储库状态;
私人存储库视频;
私有存储库事件;
私人储存库封面照片;
公共存储库用户
{
得到
{
如果(_users==null)
_users=newuserrepository(newyourtimeprojectcontext());
返回用户;
}
}
公共存储库状态
{
得到
{
如果(_status==null)
_Status=新的StatusRepository(新的YourTimeProjectContext());
返回_状态;
}
}
公共存储库视频
{
得到
{
如果(_videos==null)
_视频=新建视频存储库(新建YourTimeProjectContext());
返回视频;
}
}
公共存储库事件
{
得到
{
如果(_events==null)
_events=neweventrepository(newyourtimeprojectcontext());
返回事件;
}
}
公共存储库封面照片
{
得到
{
如果(_coverphotos==null)
_coverphotos=newcoverphotorespository(newyourtimeprojectcontext());
返回封面照片;
}
}
}
}

我在代码中发现了问题。我从主体传递的参数与用户的Create函数中所需的参数不匹配。它需要以下值:

UserId = user.UserId,
FirstName = user.FirstName,
Email = user.Email,
Gender = user.Gender,
LastName = user.LastName

我只传递了FirstName、LastName和UserId。这就是为什么更改没有保存在dbContext中。

我在代码中发现了问题。我从主体传递的参数与用户的Create函数中所需的参数不匹配。它需要以下值:

UserId = user.UserId,
FirstName = user.FirstName,
Email = user.Email,
Gender = user.Gender,
LastName = user.LastName

我只传递了FirstName、LastName和UserId。这就是为什么更改没有保存在dbContext中。

您的种子代码和Web服务类是什么样子的