在Silverlight RIA服务中实现SQL“不存在”

时间:2011-12-27 13:37:35

标签: silverlight entity-framework ria

我正在尝试将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实体是空的。如何修改它以使其返回没有汽车的人并且汽车实体的钥匙被填满。

1 个答案:

答案 0 :(得分:0)

如果“有人有车,但只有一辆车” - 那么你的DB架构就错了。为什么不将可空的carId放入Person?在这种情况下,您可以轻松地包含和操作(添加,删除等)所需的所有内容,无论是否有相关的Car

注意:如果你需要使用当前架构的这种方法 - 那么澄清什么应该返回查询(对于没有连接的项目,Car的人员列表设置为null)以及用于什么目的。