创建对象时需要将对象ID分配给字段

时间:2014-03-26 13:30:15

标签: c# asp.net-mvc

我有一个对象有一个属性,在创建时,应始终使用对象的id(主键)填充。

我该怎么做?

我尝试在db savechanges()之后将字段分配给字段,然后返回到视图,但是在我的数据库上创建了两条记录。

还尝试加载相同的新实例,将id分配给字段并保存,但也创建了两个记录。

感谢您的帮助。

//model
public partial class supplier
{
    public int id { get; set; }
    public int ref { get; set; }
}
//controller
public ActionResult Create(supplier sup)
{
    if (ModelState.IsValid)
    {
        db.suppliers.add(sup)
        db.SaveChanges();

        sup.ref = sup.id;
        db.SaveChanges();
    }
    ...
}

大家好,感谢您的帮助......我找到了解决方案......不知道它是否是正确的解决方案,但它确实能够胜任。

对于任何有兴趣的人,这是:

supplier needToUpdateSupplier = (from s in db.suppliers where s.id.Equals(supplier.id) select s).ToList().FirstOrDefault();
if (needToUpdateSupplier != null)
{
    needToUpdateSupplier.ref = supplier.id;
    db.suppliers.Attach(needToUpdateSupplier);
    db.Entry(needToUpdateSupplier).Property(e => e.ref).IsModified = true;
    db.SaveChanges();
}

2 个答案:

答案 0 :(得分:0)

  1. 创建对象
  2. 保存(SaveChanges)。这会给你id。
  3. 使用现有对象(您不需要再次加载)将id分配给您的属性
  4. 再次保存
  5. 注意:该属性必须是可空的,因为在创建时它将为空。

    // A Test object
    class MyObject
    {
        public int ID {set;get;}
        public int? MyProperty {set;get;}
    }
    
    void Foo()
    {
        var test = new MyObject();
        db.MyObjects.Add(test);
        db.SaveChanges();
    
        // at this moment test has the Id set. You can assign it.
    
        test.MyProperty = test.Id;
        db.SaveChanges();
    }
    

答案 1 :(得分:0)

使用EF,它应该为您设置ID:

db.Posts.Add(post);
db.SaveChanges();

// post.ID should be now set