无法分配给Lightswitch中的外键-属性或索引器无法分配给-它是只读的
本文关键字:分配 只读 索引 Lightswitch 属性 | 更新日期: 2024-10-18 10:49:51
我看了其他类似的问题,但我自己无法解决。我目前正在使用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"answers"NewProduct"的声明,我只能猜测您可能已经将其声明为只使用Getter而不使用Setter的Property。
如果不是这样的话,你能展示更多的代码来证明什么是失败的吗。
我解决了"问题"-这是我的错,也没有理解类型为Customer的Query数据项和类型为Customer本地属性的数据项之间的区别。
换句话说,我添加了Customer和Product作为本地屏幕成员,而不是查询,现在我的代码可以按预期工作。