【问题标题】:Cannot assign to foreign keys in Lightswitch - Property or indexer cannot be assigned to -- it is read only无法分配给 Lightswitch 中的外键 - 无法将属性或索引器分配给 - 它是只读的
【发布时间】:2015-03-05 17:12:48
【问题描述】:

我查看了其他类似的问题,但我无法自己解决这个问题。我目前正在使用 Lightswitch 12.0.3 Update 4 版本的 Lightswitch 和我以前版本的 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");
    }

【问题讨论】:

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


    【解决方案1】:

    我怀疑您遇到的问题与 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 版合理相关。

    【讨论】:

      【解决方案2】:

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

      如果不是这样,您能否展示更多代码来演示失败的原因。

      【讨论】:

        【解决方案3】:

        我解决了“问题” - 这是我的错并且未能理解作为客户类型查询的数据项与作为客户类型本地属性的数据项之间的区别。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-22
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 2017-08-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多