unitofwork and repositorypattern 一个实体对象不能被 IEntityChangeTrac
本文关键字:对象 实体 不能 IEntityChangeTrac 一个 repositorypattern and unitofwork | 更新日期: 2023-09-27 18:35:06
我有一个复杂的对象,它引用了其他对象,我正在尝试从我的 Web 应用程序中保存它。
因此,在我的 Web 应用程序中,我调用业务逻辑,从 bl 调用 DAL 外观,然后调用 DAL。
当我执行 Insert 方法时,我遇到了异常。
DAL 层中的代码,这是引发异常的地方。
public void InsertEcoBonusRequest(EcoBonusRequest ecoBonusRequest)
{
_context.EcoBonusRequests.Add(ecoBonusRequest);
}
工作单元中的代码.cs
public void Save()
{
_context.SaveChanges();
}
private RequestBaseRepository _requestBaseRepository;
public EcoBonusRequestRepository EcoBonusRequestRepository
{
get
{
return _ecobonusworkflowRepository ??
(_ecobonusworkflowRepository = new EcoBonusRequestRepository(_context));
}
}
达尔门面中的代码:
private static readonly UnitOfWork UnitOfWork = new UnitOfWork();
public void Save(EcoBonusRequest ecoBonusRequest)
{
UnitOfWork.EcoBonusRequestRepository.InsertEcoBonusRequest(ecoBonusRequest);
}
提单中的代码
public void Save(EcoBonusRequest ecoBonusRequest)
{
EcoBonusRequestFacade.Save(ecoBonusRequest);
}
**Code in the page.aspx.cs, as you can see the element ecobonusworkflow is neverstored in the database, but the navigation entities are stored already.**
var dealer = DealerBL.GetDealer(Nuteres);
var requester = RequesterBL.GetRequester(int.Parse(DdlRequester.SelectedItem.Value));
var selectedVehicle = VehicleBL.GetVehicle(VehicleInformationControl.Chassis);
var ecoBonusWorkflow = new EcoBonusRequest
{
IsOnHold = true,
AmmountWithoutVAT = decimal.Parse(TxtVatExcluded.Text),
AmmountWithVAT = decimal.Parse(TxtVatIncluded.Text),
BrandReturnedVehicle = TxtBrandReturnedVehicle.Text,
ChassisReturnedVehicle = TxtChasisReturnedVehicle.Text,
Percentage = (decimal.Parse(TxtVatExcluded.Text)/VehicleInformationControl.InvoicedAmmount)*100,
Comments = TxtComments.Text,
Customer = new Customer
{
FirstName = TxtFirstName.Text,
LastName = TxtLastName.Text,
Address = new Address
{
Street = TxtStreet.Text,
Number = TxtNumber.Text,
Box = TxtBox.Text,
City = TxtCity.Text,
Zip = TxtZip.Text
}
},
CurrentStatus = "Approval1",
Dealer = dealer,
Requester = requester,
VehicleDesctructionDate = DateTime.Parse(TxtVehicleDestructionDateReturnedVehicle.Text, userCulture),
DestructionCertificateNumberReturnedVehicle = TxtDestructionCertificateNumberReturnedVehicle.Text,
TypeReturnedVehicle = TxtTypeReturnedVehicle.Text,
Vehicle = selectedVehicle
};
EcoBonusRequest = ecoBonusWorkflow;
UploadFiles();
RedirectToPage("~/Requests/confirmation.aspx");
异常指出您的实体或根实体的导航实体已附加到另一个上下文。根据您的体系结构,您应该创建一个新上下文并每次都附加它;或者,如果要重用上下文,则应使用新值刷新上下文。
在您的情况下,您似乎正在创建一个新上下文,但尚未释放以前的上下文,因此该实体仍附加到旧上下文。在这种情况下,只需重用旧上下文,而不是创建新上下文。