WPF的MVVM-的EntityFramework
当我尝试更新MVMV WPF项目中的现有实体时,我遇到了问题 我有用户实体,其中有 UserApplication
的集合UserApplication ServerId int ApplicationId int UserId int BinDirectory varchar(MAX)
用户 登录varchar(50) Id int
当我为我的用户添加新应用程序时,我需要在UserApplications表中添加一条记录。
在我的User模型类中有一个AddApplication方法
public void AddApplication (int appId, int serverId, string bin)
{
this.userApplications.add (new UserApplication(){
ApplicationId = appId,
ServerId = serverId,
BinDirectory = bin,
userId = this.Id
});
}
在我的视图模型中,有以下代码
this.currentUser.AddApplication(_currentApp.Id, _currentServer.Id, "my_directory");
userDao.Update(this.currentUser);
在userDao中
public int Update(User userToSave)
{
using (Context dpEnt = new Context())
{
try
{
dpEnt.Attach(userToSave);
return dpEnt.SaveChanges();
}
catch (Exception ex)
{
_log.Error(ex.Message);
return -1;
}
}
}
此处我在Attach调用上有以下异常:具有临时EntityKey值的对象无法附加到对象上下文。
我也尝试过(userDao)
public int Update(UserApplication userApp)
{
using (Context dpEnt = new Context())
{
try
{
dpEnt.UserApplications.AddObject(userApp);
return dpEnt.SaveChanges();
}
catch (Exception ex)
{
_log.Error(ex.Message);
return -1;
}
}
}
在这里,它也不起作用
你能帮我吗?
答案 0 :(得分:0)
在将用户附加到上下文后,您必须将应用程序添加到用户。否则EF将无法识别新应用程序:
在userDao中你需要一些方法,如:
public int AddApplicationToUser(User userToSave,
int appId, int serverId, string bin)
{
using (Context dpEnt = new Context())
{
try
{
dpEnt.Attach(userToSave);
userToSave.AddApplication(appId, serverId, bin);
return dpEnt.SaveChanges();
}
catch (Exception ex)
{
_log.Error(ex.Message);
return -1;
}
}
}
然后只打电话:
userDao.AddApplicationToUser(this.currentUser,
_currentApp.Id, _currentServer.Id, "my_directory");
您还可以将新应用程序直接添加到上下文并保存更改,因为您的应用程序具有为用户设置的正确外键属性。