带有鉴别器的物品清单

时间:2014-09-04 15:36:40

标签: c# entity-framework asp.net-mvc-4 n-tier-architecture

假设我有一个实体和一个名为Client的数据库表。 Client有一个外键 - CountryId连接到Countries表。

ClientAClientBClientC继承自Client

我想列出系统中的所有客户端(包括那些具有null countryId的客户端),以及它们的具体类型(鉴别器值)和国家/地区名称。

我的查询看起来像这样:

from client in DbContext.Set<Client>()
                    from country in DbContext.Set<Country>().Where(x => x.Id == client.CountryId).DefaultIfEmpty()
                    where !(client is Salon)                         
                    select new
                    {
                        Id = client.Id,
                        Name = client.ClientName,
                        ClientClass = "TODO",
                        CountryName = country.CountryName
                    };

我的问题:如何选择鉴别值?请注意我现在卡住的代码中的“TODO”..

谢谢!

1 个答案:

答案 0 :(得分:0)

鉴别器列在Code First内部使用,您无法从继承映射的角度读取/写入其值。

要获得分词符,您必须创建自定义SQL查询

context.Database.SqlQuery<T>("SELECT client.Id, client.ClientName, client.Discriminator, country.CountryName FROM Countries country LEFT JOIN Clients client ON country.Id = client.CountryId WHERE client.Discriminator <> 'salon'").ToList()