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

Cannot assign to foreign keys in Lightswitch - Property or indexer cannot be assigned to -- it is read only

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

我得到一个错误:

Property or indexer 'LightSwitchApplication.Report.Customer' cannot be assigned to -- it is read only

其中 Report 是我的屏幕,Customer 是我的 table。所以在(屏幕的)后面的代码中,我正在尝试这样做:

    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 无法分配给,因为它是只读的。

我错过了什么?

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

Property or indexer 'LightSwitchApplication.Report.NewProduct' cannot be assigned to -- it is read only

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

        this.OpenModalWindow("NewProduct");
    }

我怀疑您遇到的问题与 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 update 4 版本有一定的相关性。

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

如果不是这种情况,您能否显示更多代码来说明失败的原因。

我解决了 "problem" - 这是我的错,未能理解作为 Customer 类型查询的数据项与作为 Local 属性 类型 Customer 的数据项之间的区别。

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