use*_*283 2 c# silverlight wcf-ria-services
你好,我有点困惑的是如何从单个项目中的表中获得单个"项目"而不是集合...
这是我的viewmodel:
public class ProjectViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private int _loadedProjectId;
public int LoadedProjectId
{
get
{
return _loadedProjectId;
}
set
{
if (value != _loadedProjectId)
{
_loadedProjectId = value;
_Context.Load(_Context.GetProjectFromIdQuery(_loadedProjectId));
PropertyChanged(this, new PropertyChangedEventArgs("LoadedProjectId"));
}
}
}
public Project loadedProject { get; set; }
public IEnumerable<Project> Projects { get; set; }
private myDomainContext _Context = new myDomainContext();
public ProjectViewModel()
{
Projects = _Context.Projects;
if (!DesignerProperties.IsInDesignTool)
{
_Context.Load(_Context.GetProjectsQuery());
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题出在这里
_Context.Load(_Context.GetProjectFromIdQuery(_loadedProjectId));
Run Code Online (Sandbox Code Playgroud)
因为我不想在我的上下文中加载它但我想做这样的事情:(但显然我不能)
loadedProject = _Context.GetProjectFromIdQuery(_loadedProjectId);
Run Code Online (Sandbox Code Playgroud)
以下是我的域名服务中的查询:
public IQueryable<Project> GetProjects()
{
return this.ObjectContext.Projects;
}
public Project GetProjectFromId(int id)
{
return this.ObjectContext.Projects.SingleOrDefault(t => t.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
我这样做是错误的吗?我应该只搜索我已经拥有的项目集合中的项目吗?
tx为此揭开了光芒!
当您的查询方法只返回一个元素时,RIA Services也可以使用集合.要访问单个元素,您必须使用返回的LoadOperation <Project>实例进行调用
LoadOperation<Project> loadOperation = _Context.Load(_Context.GetProjectFromIdQuery(_loadedProjectId));
Run Code Online (Sandbox Code Playgroud)
LoadOperation提供属性实体,其中包含操作加载的所有实体.因此,在您的情况下,它包含只有一个实体的枚举.
要从集合中获取实体,您可以这样做
Project loadedProject = loadOperation.Entities.FirstOrDefault(p=>p.Id=_loadedProjectId);
Run Code Online (Sandbox Code Playgroud)
如果您真的不想将加载的实体添加到您的上下文(我不推荐),您必须使用Invoke-Operation,但是您没有对加载的实体进行更改跟踪和关联管理.
| 归档时间: |
|
| 查看次数: |
1130 次 |
| 最近记录: |