我已经接管了一个使用EF6,存储库模式,工作单元的MVC Web项目。我才刚刚开始学习EF6。
我想创建一个新的组织并将其保存到数据库中,然后获取新的组织ID。新的组织ID将用于重命名将存储在Organisation.logo中的图像文件。然后使用新文件名更新数据库中的组织徽标字段。
我保存了组织,获取了新的组织ID,重命名了文件,但无法获取徽标字段进行更新?
以下代码:
组织控制器-显示了基本代码,我已删除了大量验证并重命名图像文件。
public ActionResult Create(OrganisationViewModel viewModelToCreate)
{
Organisation newOrganisation = new Organisation();
newOrganisation.Name = viewModelToCreate.Name;
newOrganisation.Logo = "To Change";
_Uow.OrganisationRepository.InsertOrUpdate(newOrganisation);
if (ModelState.IsValid)
{
_Uow.Save();
int newOrganisationId = _Uow.OrganisationRepository.LastInsertedID();
Organisation organisationToUpdate = _Uow.OrganisationRepository.Find(newOrganisationId);
string fileName = newOrganisationId.ToString() + Path.GetExtension(viewModelToCreate.FileNameToAdd.FileName);
organisationToUpdate.Logo = fileName;
_Uow.OrganisationRepository.InsertOrUpdate(organisationToUpdate);
_Uow.Save();
}
}
public virtual T InsertOrUpdate(T e)
{
DbSet<T> dbSet = Context.Set<T>();
DbEntityEntry<T> entry;
if (e.ID != default(int))
{
entry = Context.Entry(e);
}
else
{
T instance = dbSet.Create();
instance.ID = e.ID;
entry = Context.Entry(instance);
dbSet.Attach(instance);
entry.CurrentValues.SetValues(e);
e = instance;
}
entry.State = e.ID == default(int) ?
EntityState.Added :
EntityState.Modified;
return e;
}
int IUnitOfWork.Save()
{
return _Context.SaveChanges();
}
public int LastInsertedID()
{
Context = new aContext();
int newOrganisationId = Context.Organisations.OrderByDescending(x => x.ID).FirstOrDefault().ID;
return newOrganisationId;
}
如何用新的文件名更新organisationToUpdate.Logo,它不保存到数据库中?
答案 0 :(得分:1)
由于您尚未共享UoW和存储库方法,因此我们无法知道代码中到底发生了什么。但是,我提供了所需的代码,可以满足您的需要,而无需考虑存储库和UoW。只需检查您的代码是否在执行以下操作即可:
var db = new AppDbContext();
// inserting new organization
Organisation newOrganisation = new Organisation();
newOrganisation.Name = viewModelToCreate.Name;
newOrganisation.Logo = "To Change";
db.Organisation.Add(newOrganisation);
db.SaveChanges();
// updating the inserted organization
string fileName = ”New FileName”;
newOrganisation.Logo = fileName;
db.SaveChanges();
答案 1 :(得分:0)
您需要两次调用[UOW.Save]方法。像你一样叫第一个。完成此操作后,保存的实体将使用在数据库中分配的ID更新。然后添加带有该ID的代码,并根据需要将其附加到文件名中。如果这不起作用,则您的UOW或存储库出现问题,导致其无法正常工作。顺便说一句,UOW和存储库是“模式”而不是实现,因此我们不能期望知道代码的外观以及它的工作方式,如果需要,您需要更确切地说明正在执行的操作回答