实体框架原始SQL查询和关系模型

时间:2017-08-28 12:14:56

标签: c# sql-server entity-framework linq

我有一个关于将T-SQL查询用作模型实体并将结果的一部分映射为相关实体的问题。

我有这个模型类,例如:

public class Device
{
    public int DeviceId { get; set; }

    public PlatformId { get; set; }
    public string DeviceName { get; set; }
    public PlatformName { get; set; }        
}

我使用Entity Framework中的SQL查询方法(客户端需要原始SQL并且不能使用常规数据模型映射)。 SQL调用看起来像(主要模型在哪里):

public List<TResultModel> ExecuteSqlQuerry<TResultModel>(string query)
{
    try
    {
        return this.DbConnection.Database.SqlQuery<TResultModel>(query).ToList<TResultModel>();
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

Sql查询相当简单,它获取设备列表并加入平台,并且可以在几个平台上找到一个设备,这样简单的连接:

select * 
from devices
join platforms on devices.platform_id = platforms.id order by platforms.name

如果我使用这个SQL查询,我会收到很多重复的设备。

重复我是指具有不同平台名称的重复设备名称列表,例如:

Device | Platform

Dev A  |  Pl A
Dev A  |  PL B
Dev B  |  PL A
Dev B  |  PL B

他们的id和名字所以我必须手动过滤所有这些值(以及linq)。

所以我想知道是否有任何方法可以将模型映射到这样的SQL查询,因此结果可以将自身绑定到可能看起来像的模型:

public class Device
{
    public int DeviceId { get; set; }

    public string DeviceName { get; set; }
    public List<Platform> Platforms { get; set; }        
}

0 个答案:

没有答案