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。

MVC实体模型复制对象

在您的操作中执行此操作:

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();

或者阅读这篇关于克隆实体的文章。