我是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();
}
这是完成此任务的正确方法吗?
请建议。
由于
答案 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.