将Sharepoint / Linq错误插入查阅列

时间:2013-03-29 21:46:59

标签: linq sharepoint insert lookup

在Sharepoint中,我有一个产品列表和一个类别列表。我正在尝试从Web表单创建一个新的(产品)项目。产品列表有一个类别查找列,当我尝试创建一个新的Product实例时,我在插入时得到一个空引用错误。我读了一篇文章,说明需要使用非查找列值创建项目,检索新项目的id,然后将值插入查阅列,但我得到相同的错误。任何人都可以帮助正确的方法来做到这一点吗?

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();

1 个答案:

答案 0 :(得分: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();