MVC实体模型复制对象
本文关键字:对象 复制 实体模型 MVC | 更新日期: 2023-09-27 18:26:35
我有一个名为GeneralInformation
的对象,我想在表中复制它,但是,很明显,这个新记录将有一个不同的GeneralInformationID
。
我的目标是让用户单击指向domain.com/proforma/copyversion/<id>
的链接,它在下面的控制器中执行操作。
这是我的控制器:
[HttpPost]
public ActionResult CopyVersion(int? id)
{
Version version = db.Versions.Find(id);
GeneralInformation generalInformation = version.GeneralInformation;
var generalInformationCopy = generalInformation;
generalInformationCopy.GeneralInformationID = null;
db.Entry(generalInformationCopy).State = EntityState.Added;
return View("Index");
}
我收到一条错误消息:"Cannot convert source type 'null' to target type 'int'
。GeneralInformationID
是主键和标识,自动生成列。
我的实体模型中有两个表:
GeneralInformation
-------------------
GeneralInformationID (PK)
VersionID
FirstName
LastName
我的第二张桌子:
Version
--------
VersionID (PK)
OwnerID
VersionOwner
VersionNumber
isLocked
如何制作我所拥有的GeneralInformation对象的副本?
编辑-更新型号:(包含错误)
[HttpGet]
public ActionResult CopyVersion(int? id)
{
Version version = Db.Versions.Find(id);
version.isLocked = true;
Db.Entry(version).State = EntityState.Modified;
// Add new Version of the Proforma
var newVersion = new Version() {
VersionParentID = version.ProformaID,
OwnerID = version.OwnerID,
AuthorName = version.AuthorName,
VersionNumber = (version.VersionNumber + 1)
};
Db.Entry(newVersion).State = EntityState.Added;
Db.SaveChanges();
// Create a copy of `GeneralInformation` and UPDATE the VersionID
var generalInformation = proformaDb.GeneralInformations.Create();
proformaDb.Entry<GeneralInformation>(version.GeneralInformation).CurrentValues.SetValues(generalInformation);
Db.GeneralInformations.Add(generalInformation);
Db.SaveChanges();
// Redirect to the Proforma Index View
return RedirectToAction("Index");
}
我得到以下错误:
The property 'VersionID' is part of the object's key information and cannot be modified.
VersionID是表上的PK。
在您的操作中执行此操作:
GeneralInformation generalInformationCopy = db.GeneralInformations.Create(); // i assume that you have this dbset in your contex
db.GeneralInformations.Add(generalInformationCopy);
db.Entry<GeneralInformation>(generalInformationCopy).CurrentValues.SetValues(generalInformation);
db.SaveChanges();
或者阅读这篇关于克隆实体的文章。