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



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

我得到一个错误:

属性或索引器的LightSwitchApplication。汇报客户'无法分配给--它是只读

其中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。汇报无法将NewProduct分配给--它是只读

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

我怀疑您遇到的问题与2011年初测试版和RTM发布之间的许多更改有关。

虽然我对Silverlight方面有点生疏(近年来一直专注于HTML5LightSwitch路由),但我会尝试提供一些可能有所帮助的指针。

关于您的Report_InitializeDataWorkspace代码(我猜这是默认的。客户值基于传递的参数),您应该能够处理如下问题:-

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团队博客-创建自定义添加或编辑对话框(Sheel Shah)

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

如果没有看到"Customer"one_answers"NewProduct"的声明,我只能猜测您可能已经将其声明为只使用Getter而不使用Setter的Property。

如果不是这样的话,你能展示更多的代码来证明什么是失败的吗。

我解决了"问题"-这是我的错,也没有理解类型为Customer的Query数据项和类型为Customer本地属性的数据项之间的区别。

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

最新更新