C# 类型为';System.Data.Entity.Infrastructure.DbUpdateException';发生
我在尝试向数据库插入条目时遇到此错误。我可以手动对数据进行种子设定,但当我在Web API中调用POST方法时,我会出现此错误 这是我的用户实体类: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
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服务类是什么样子的