如何使用C#中的对象初始值设定项初始化封装在getter/setter中的EntitySet?
我正在为自己的应用程序调整。这里建议使用getter/setter组合包装模型对象上的如何使用C#中的对象初始值设定项初始化封装在getter/setter中的EntitySet?,c#,windows-phone-7,linq-to-sql,C#,Windows Phone 7,Linq To Sql,我正在为自己的应用程序调整。这里建议使用getter/setter组合包装模型对象上的EntitySet属性,该组合允许使用IEnumerable(使用Assign方法)进行赋值,例如 错误如下: Error 1 Cannot implicitly convert type 'System.Collections.Generic.List<SomeApp.ToDoItem>' to 'System.Data.Linq.EntitySet<SomeApp.ToDoI
EntitySet
属性,该组合允许使用IEnumerable
(使用Assign
方法)进行赋值,例如
错误如下:
Error 1 Cannot implicitly convert type
'System.Collections.Generic.List<SomeApp.ToDoItem>' to
'System.Data.Linq.EntitySet<SomeApp.ToDoItem>'
错误1无法隐式转换类型
“System.Collections.Generic.List”到
'System.Data.Linq.EntitySet'
如何实例化从
EntitySet
引用的对象?嗯,您发布的代码有两个问题
我怀疑主要的问题是,当属性的类型为EntitySet
时,您试图将属性的值设置为列表。(您发布的错误消息与您发布的代码不匹配,但没关系。)您说它“应该允许从IEnumerable
赋值,但我不知道为什么您会期望这种情况,因为属性声明:
public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
get { return this._todos; }
set { this._todos.Assign(value); }
}
我假设您的真实代码更像这样:
SomeModelObject myModelObject = new SomeModelObject() {
Property1 = "foo",
...
};
请以后更加小心-很难诊断未发布的代码
实体集有三个选项
如果要向现有的EntitySet
添加新项,可以在对象初始值设定项中执行此操作:
SomeModelObject myModelObject = new SomeModelObject {
Property1 = "foo",
Property2 = true,
ToDos = {
new ToDoItem(),
}
};
或者,如果要设置属性本身的值,则需要创建一个新的EntitySet
:
SomeModelObject myModelObject=新建SomeModelObject{
Property1=“foo”,
Property2=真,
ToDos=新实体集{
新ToDoItem(),
}
};
不过,这似乎不是个好主意,我实际上建议将二传员保密
或者,如果确实希望能够分配任何IEnumerable
,只需更改属性的类型即可:
public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
get { return this._todos; }
set { this._todos.Assign(value); }
}
[关联(存储=“\u todos”,OtherKey=“\u categoryId”,ThisKey=“Id”)]
公共可数TODO
{
获取{返回此。\u todos;}
设置{this._todos.Assign(value);}
}
您发布的代码有两个问题
我怀疑主要的问题是,当属性的类型为EntitySet
(您发布的错误消息与您发布的代码不匹配,但没关系)时,您试图将属性的值设置为列表
,您说“应该允许从IEnumerable
进行赋值”,但我不知道你为什么会认为是这样,考虑到财产声明:
public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
get { return this._todos; }
set { this._todos.Assign(value); }
}
我假设您的真实代码更像这样:
SomeModelObject myModelObject = new SomeModelObject() {
Property1 = "foo",
...
};
请以后更加小心-很难诊断未发布的代码
实体集有三个选项
如果要向现有的EntitySet
添加新项,可以在对象初始值设定项中执行此操作:
SomeModelObject myModelObject = new SomeModelObject {
Property1 = "foo",
Property2 = true,
ToDos = {
new ToDoItem(),
}
};
或者,如果要设置属性本身的值,则需要创建一个新的EntitySet
:
SomeModelObject myModelObject=新建SomeModelObject{
Property1=“foo”,
Property2=真,
ToDos=新实体集{
新ToDoItem(),
}
};
不过,这似乎不是个好主意,我实际上建议将二传员保密
或者,如果确实希望能够分配任何IEnumerable
,只需更改属性的类型即可:
public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
get { return this._todos; }
set { this._todos.Assign(value); }
}
[关联(存储=“\u todos”,OtherKey=“\u categoryId”,ThisKey=“Id”)]
公共可数TODO
{
获取{返回此。\u todos;}
设置{this._todos.Assign(value);}
}
首先,是的,你是对的,我已经调整了代码,以尝试获得最简单的案例-我已经更新了问题。其次,我认为可以将IEnumerable分配给实体集的原因是,setter使用assign
并据此接受IEnumerable。@Brendan:assign
接受IEnumerable
,但这不是属性的类型,是吗?Assign
的使用只是一个实现细节。好吧,这太棒了,它现在使用类型化的EntitySet
进行编译,但是如果我正在创建一个新对象,那么ToDos
属性在什么条件下会预先存在?@Brendan:如果包含该对象的构造函数创建了它?(正如您在查看的示例代码中所做的那样…)首先,是的,您是对的,我调整了代码以尝试获得最简单的情况-我更新了问题。其次,我认为可以将IEnumerable分配给实体集的原因是,setter使用assign
并据此接受IEnumerable。@Brendan:assign
接受IEnumerable
,但这不是属性的类型,是吗?Assign
的使用只是一个实现细节。好吧,这太棒了,它现在使用类型化的EntitySet
进行编译,但是如果我正在创建一个新对象,那么ToDos
属性在什么条件下会预先存在?@Brendan:如果包含该对象的构造函数创建了它?(正如您在查看的示例代码中所做的那样…)