使用Entity Framwork复制MVC中的重复记录

时间:2016-05-12 08:30:21

标签: c# asp.net-mvc entity-framework

我是MVC实体框架的新手。

我有一个名为Product的表。它包含40个字段。

我有一项任务是复制产品或使用新的产品ID在同一个表中创建重复记录。

我怎样才能以有效的方式做到这一点?

我尝试使用以下代码

Public ActionResult CopyProduct(long ProductID)
{
var oldProductScript = db.Products.FirstOrDefault(x=>x.ProductID == ProductID)


Product p = new Product();
p.name = oldProductScript.name;
p.price =oldProductScript.price;
p.model =oldProductScript.model;
p.image = oldProductScript.image;
p.status =oldProductScript.status;
.
.
.
.
.
like so till 40th field

db.Products.AddObject(p);
db.SaveChanges();

}

这是完成此任务的正确方法吗?

请建议。

由于

3 个答案:

答案 0 :(得分:0)

如果您希望这样做更容易(减少编码),我建议您使用Code First Approach。 使用此link来了解它是什么以及代码示例。

使用Code First Approach添加带有模型的表(DBContext)后,您可以比平常方法更快地获取和设置表的属性。

public class InheritanceMappingContext : DbContext
{
    public DbSet<TableName> TableProperty { get; set; }
}

使用多态查询来检索表的字段。

IQueryable<TableName> linqQuery = from b in context.TableName select b;
List<TableName> tableFields = linqQuery.ToList(); 

linqQuery返回类型

的对象列表

答案 1 :(得分:0)

尝试这样的事情:

        Products productToCopy = db.Products.FirstOrDefault(p => p.ProductId == productID);
        db.Entry(productToCopy).State = EntityState.Detached;
        productToCopy.ProductId = 0;
        db.Products.Add(productToCopy);
        db.SaveChanges();

答案 2 :(得分:0)

警告:我已经用我的一个课程测试了这个并且它有效。不确定它是否适用于您:

var prod = context.Products.FirstOrDefault(p => p.ProductID == ProductID);
var prod2 = new Products();
foreach (PropertyInfo pi in prod.GetType().GetProperties())
{
    prod2.GetType().GetProperties().First(p=>p.Name==pi.Name).SetValue(prod2, pi.GetValue(prod, null), null);
}

//prod2 is now a clone of prod. Make sure to adjust your product ID before adding the new product.