无法在Lightswitch中分配外键 - 无法将属性或索引器分配给 - 它是只读的

时间:2015-03-05 17:12:48

标签: c# visual-studio-lightswitch lightswitch-2012

我看了其他类似的问题,但我无法自己解决这个问题。我目前正在使用Lightswitch的Lightswitch 12.0.3 Update 4版本和我以前版本的Lightswitch我可以轻松地做这些事情......所以我不明白改变了什么以及为什么我不能再这样做了。

我收到错误:

  

无法将属性或索引器“LightSwitchApplication.Report.Customer”分配给 - 它是只读的

Report是我的屏幕,Customer是我的桌子。所以在(屏幕)背后的代码中我试图这样做:

    partial void Report_InitializeDataWorkspace(List<IDataService> saveChangesTo)
    {
        if (this.CustomerId.HasValue)
        {
            this.Customer = this.DataWorkspace.ApplicationData.Customers.Where(w => w.Id == this.CustomerId.Value).Single();
        }
    }

在这种情况下,CustomerId是添加到我的屏幕的本地int属性。

现在错误是this.Customer无法分配,因为它是只读的。

我错过了什么?

另外,我在另一个地方遇到同样的错误:

  

无法将属性或索引器“LightSwitchApplication.Report.NewProduct”分配给 - 它是只读的

    partial void CreateNewProduct_Execute()
    {
        this.NewProduct = this.DataWorkspace.ApplicationData.Products.AddNew();

        this.OpenModalWindow("NewProduct");
    }

3 个答案:

答案 0 :(得分:2)

我怀疑您遇到的问题与2011年初测试版和RTM版本之间的许多变化有关。

虽然我在Silverlight方面有点生疏(近年来专注于HTML 5 LightSwitch路线)但我会尝试提供一些可能有用的指示。

关于你的Report_InitializeDataWorkspace代码(我猜测它是根据传递的参数来默认this.Customer值)你应该能够解决这个问题,如下所示: -

if (this.CustomerId.HasValue)
{
    var c = this.DataWorkspace.ApplicationData.Customers.Where(w => w.Id == this.CustomerId.Value).Single();
    this.Customer.Name = c.Name;
    this.Customer.AddressLine1 = c.AddressLine1;
}

如果您的意图不是这样,那么请您提供一些有关您尝试实施的内容的更多背景信息。

关于CreateNewProduct代码,您应该能够实现以下几行: -

partial void CreateNewProduct_Execute()
{
    Product newProduct = this.DataWorkspace.ApplicationData.Products.AddNew();
    this.Products.SelectedItem = newProduct;
    this.OpenModalWindow("NewProduct");
}

同样,如果我误解了您的意图,请为您提供更多背景信息。

以下文章也可能对这方面有帮助(虽然它只涉及vb方法而不是c#代码): -

LightSwitch Team Blog - Creating a Custom Add or Edit Dialog (Sheel Shah)

虽然该文章大约是2011年版,但它仍应与您正在使用的2013年更新4版本相关。

答案 1 :(得分:1)

没有看到'Customer'和'NewProduct'的声明,我只能猜测你可能已经将它声明为只有Getter的属性 - 没有Setter。

如果不是这种情况,您是否可以显示更多代码来演示失败的内容。

答案 2 :(得分:0)

我解决了&#34;问题&#34; - 这是我的错,无法理解数据项作为Customer类型的查询和数据项作为Customer类型的Local Property之间的区别。

换句话说,我将Customer和Product都添加为本地屏幕成员而不是查询,现在我的代码按预期工作。