我正在尝试将Silverlight与RIA服务一起使用。 CRUD操作非常简单。但我坚持“不存在”的情况。
我有两个实体Person( personID ,personName)和Car( carID , personID )。有人有车,但只有一辆车。
internal sealed class Person
{
private PersonMetadata() { }
public int personID { get; set; }
public string personName { get; set; }
[Include]
public Car CarNavigation { get; set; }
}
internal sealed class Car
{
private CarMetadata() { }
public string carName { get; set; }
public int personID { get; set; }
}
public IQueryable<Person> GetPersonEager()
{
return this.ObjectContext.Person.Include("CarNavigation");
}
<sdk:DataGrid Name="PersonGrid" AutoGenerateColumns="False">
<sdk:DataGrid.Columns >
<sdk:DataGridTextColumn Binding="{Binding personID}" />
<sdk:DataGridTextColumn Binding="{Binding personName}" />
<sdk:DataGridTextColumn Binding="{Binding CarNavigation.carName}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
PersonGrid.ItemsSource = context.Person;
context.Load(context.GetPersonEager());
此结构非常适用于更新。我也可以更新汽车的名字。
但是,我还想列出没有车的人。而且我也希望能够为他们添加汽车。我试过了:
public IQueryable<Person> GetPersonEagerWhoDoesNotHaveACar()
{
return this.ObjectContext.Person.Include("CarNavigation").Where( x => x.CarNavigation == null );
}
上面的方法让我没有车的人,但Car实体是空的。如何修改它以使其返回没有汽车的人并且汽车实体的钥匙被填满。
答案 0 :(得分:0)
如果“有人有车,但只有一辆车” - 那么你的DB架构就错了。为什么不将可空的carId放入Person
?在这种情况下,您可以轻松地包含和操作(添加,删除等)所需的所有内容,无论是否有相关的Car
。
注意:如果你需要使用当前架构的这种方法 - 那么澄清什么应该返回查询(对于没有连接的项目,Car的人员列表设置为null)以及用于什么目的。