2014-03-26 459 views
0

我有一個對象,該對象具有創建時應始終使用對象的ID(主鍵)填充的屬性。創建對象時需要將對象ID分配給字段

我該怎麼做?

我已經嘗試在數據庫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

這個問題需要更多的細節。你如何將數據保存到數據庫?你在使用實體框架等嗎? – MrDustpan

+0

對不起,是的,我正在使用EF ...不是C#開發人員... – user2881726

+0

爲什麼你要引用它自己?這會增加數據庫或應用程序中的關係的價值麼? – Justin

回答

0
  1. 創建對象
  2. 保存它(的SaveChanges)。這會給你的身份證。
  3. 分配的ID給你的財產,使用現有的對象(你不需要重新加載)
  4. 再次保存

注:該屬性必須是空,因爲在高達創造它會空着。

// 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(); 
} 
+0

嗨...感謝您的答案,但我已經嘗試過...如果我使用dbcontext.savechanges()兩次,它會創建兩個記錄...我剛剛嘗試設置狀態修改之前第二次savechanges( )但仍然這樣做。 – user2881726

+0

您的模型或您使用的代碼有問題。請提供一些模型和方法的代碼。 – Odys

+0

嗨奧德斯,你的例子就是我的代碼。 – user2881726

0

隨着EF應該設置ID爲您提供:

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

// post.ID should be now set 
+1

如果該字段被配置爲身份。 –