gpt4 book ai didi

c# - Entity Framework 6 将自定义 SQL 查询映射到实体

转载 作者:行者123 更新时间:2023-12-05 07:37:20 25 4
gpt4 key购买 nike

我目前对 ASP.NET MVC 和 Entity Framework 还很陌生。目前,我已经使用它大约 3 个月了。

我有一个运行 Entity Framework 6 的 ASP.NET MVC 5 应用程序。这是一种来自现有数据库的代码优先方法,启用了自动迁移,因此我的所有实体类都是自动生成的。我正在尝试向返回特定结果集的 MVC 应用程序添加一个 View 。目前,以前的开发人员将应用程序设置为仅接受实体类以将数据显示到 DataTable DataTables.net .进一步澄清:

我的模型中有两个实体表,它们是 MySQL 中的表。

| Samples           | SampleLocation |
|:------------------|---------------:|
| Id | LocationId |
| DateAssigned | Name |
| CheckedInDate | Size |
| SampleLocationId | |
| ...etc | ...etc |

我想要完成的是查询这两个表并将结果返回到 View 中的 MVC 应用程序。从那里运行 Update 并更新 Samples 表中的几列。下面是返回我需要的结果的大致查询。

SELECT Samples.Id, samples.CheckedInDate, SampleLocation.Name, SampleLocation.Size, 
SampleLocation.LocationId
FROM (Samples join SampleLocation
ON ((Samples.SampleLocationId = SampleLocation.LocationId)))
WHERE isnull(samples.CheckedInDate) ORDER BY samples.Id

根据我所做的研究,有几种方法可以实现这一目标。我尝试过的方法会给我一个我可以使用的类是创建一个存储过程然后更新模型——这会破坏模型并取消映射模型中的每个实体。我已经尝试创建一个带有查询的 View 以添加到模型中 - 但这也会破坏它并取消映射所有内容。后来我发现这是一个错误。

所以我的问题是,如何将查询映射到将结果返回到 View 的实体?有没有更好的方法来解决这个问题?

最佳答案

有几种方法可以完成你想做的事情,要么只使用 Entity Framework ,要么使用额外的工具,如 Dapper

仅限 Entity Framework :

首先你可以使用Linq要提取数据,我将看起来像这样:

var list = from s in Samples
join l in SampleLocations
on s.Id equals l.LocationId
where s.CheckedInDate == null
select new
{
s.Id,
s.CheckedInDate,
l.Name,
l.Size,
l.LocationId
};

小巧:

第二种方法是使用 dapper,这里唯一真正的区别是您将直接处理您的查询,所以您有这样的东西而不是 linq:

Connection.Query(@"SELECT Samples.Id, samples.CheckedInDate,  
SampleLocation.Name, SampleLocation.Size,
SampleLocation.LocationId
FROM Samples
join SampleLocation
ON Samples.SampleLocationId = SampleLocation.LocationId
WHERE isnull(samples.CheckedInDate) ORDER BY samples.Id");

对于两者:

在您的更新方法中,您首先必须检索实体,为此您可以使用 DbSet.Find 方法或其他查询,然后调用 DbConext.SaveChanges.

关于c# - Entity Framework 6 将自定义 SQL 查询映射到实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48631201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com