实体框架没有保存上下文的子对象
本文关键字:对象 上下文 保存 框架 实体 | 更新日期: 2023-09-27 18:10:37
我试图与实体框架的工作,但我遇到了一个问题,我的设计。我的UserProfile类有三个字段,UserId、UserName和jk_userHandle,前两个字段更新,当我对对象进行更改时可以保存。然而,我甚至不能创建一个非空版本jk_userHandle。我不确定哪里出错了。
我已经google/stackoverflow这个到地狱,并问了我办公室的人,似乎没有人知道-_-
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public void changeDataItem_edit(UserProfile choice, jk_userProfile model)
{
var found = UserProfiles.Find(choice.UserId); //finds prof
if (found == null) throw new KeyNotFoundException();
UserProfile tempProfile = choice;
tempProfile.jk_userHandle = model;
/*
stuff i found on stackoverflow, but
found.jk_userHandle = model;
or
found.jk_userHandle.biography = model.biography
don't work either. In all scenarios, when I step through i see my dbset's value change, but will not persist out of the http post. I've tried db.SaveChanges() (outside this function call) as well.
Stackoverflow link: http://stackoverflow.com/questions/7850774/updating-a-reference-to-a-child-object-in-entity-framework-4-1-codefirst
*/
this.Entry(found).CurrentValues.SetValues(tempProfile);
found.jk_userHandle = tempProfile.jk_userHandle;
this.SaveChanges();
}
}
下面是userprofile类:
[Table("UserProfile")]
public class UserProfile
{
public jk_userProfile jk_userHandle; //is the handle for the rest of the account info...
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public UserProfile()
{
jk_userHandle = new jk_userProfile();
}
}
以防万一,这里是jk_userHandle
public class jk_userProfile
{
public string userName { get; set; }
[DataType(DataType.Date)]
public string lastLogin { get; set; }
[DataType(DataType.Date)]
public string creationDate { get; set; }
[DataType(DataType.MultilineText)]
[Display(Name = "Just Connekt Biography", Description = "Write about yourself, favorite movies, shows, activities, what you like to do, etc...")]
public string biography { get; set; }
public jk_userProfile()
{
}
}
好吧,你在很多方面都错了。
首先,虽然技术上没有错,但命名很奇怪。最好使用一致的命名约定。就叫它UserProfile或者UserProfileJK如果你真的需要JK的话
第二,您已经将jk_userProfile创建为一个字段,而不是一个属性。实体框架不能处理字段。它只适用于属性,所以你需要让它成为一个。
第三,不要像那样在DbContext中添加方法,创建一个不同的数据层类来执行业务逻辑,并让它使用DbContext。