2013-03-29 45 views
0

在Sharepoint中,我有一個產品列表和一個類別列表。我正在嘗試從Web表單創建一個新的(Product)項目。產品列表有一個類別查找列,當我嘗試創建產品的新實例時,我的插入上出現空引用錯誤。我讀了一篇文章,需要使用非查找列值創建該項目,檢索新項目的id,然後將該值插入查找列,但我得到相同的錯誤。任何人都可以幫助正確的方式來做到這一點?Sharepoint/Linq錯誤插入查找列

ProductDevelopmentDataContext dc = new ProductDevelopmentDataContext(SPContext.Current.Web.Url); 
EntityList<ProductItem> Product = dc.GetList<ProductItem>("Product"); 

ProductItem newProduct = new ProductItem(); 
newProduct.Title = title.Text; 
newProduct.ProductDescription = description.Text; 

dc.Product.InsertOnSubmit(newProduct); 
dc.SubmitChanges(); 

var newProductID = (int)newProduct.Id; 
ProductDevelopmentDataContext newdc = new ProductDevelopmentDataContext(SPContext.Current.Web.Url); 

newProduct = (from p 
     in newdc.Product 
     where p.Id == newProductID 
     select newProduct).Single(); 
newProduct.CategoryName.Title = category.Text; 

newdc.Product.InsertOnSubmit(newProduct); 
newdc.SubmitChanges(); 

回答

0

這是因爲newProduct.CategoryName爲空。而不是分配查找標題,分配對象本身:

newProduct.CategoryName = category 

然後,所有你需要做的是SubmitChanges()。再次調用InsertOnSubmit將創建一個新記錄。

另外,您不需要創建兩個ProductDevelopmentDataContext對象,只需將dc用於所有命令即可。

編輯:要獲得CategoryItem對象:

newProduct.CategoryName = (from c 
     in dc.Categories 
     where c.Title == category 
     select new c).First(); 
+0

謝謝我沒想到它通過對insertOnSubmit。好吧,我刪除了它,並刪除了第二個數據上下文。但是當我更改爲'newProduct.CategoryName = category'時,出現有關將字符串轉換爲類型CategoryItem的轉換錯誤 – user1366794

+0

您需要執行查找以獲取CategoryItem對象,就像獲取newProduct對象時那樣第二次) –

+0

var lookupitem = Category.Where(s => s.Title == category.Text).FirstOrDefault();太棒了,謝謝先生! – user1366794