gpt4 book ai didi

asp.net-mvc - MVC Entity Framework 模型未返回正确的数据

转载 作者:行者123 更新时间:2023-12-04 06:39:04 26 4
gpt4 key购买 nike

在编写 ASP.NET MVC 站点时遇到一个奇怪的问题。我的 SQL Server 数据库中有一个返回几个日期范围的 View 。在 SSMS 中运行查询时,该 View 工作正常。

当 Entity Framework 模型返回 View 数据时,它返回正确的行数,但有些行是重复的。

这是我所做的一个例子:

SQL Server 代码:

编辑:(表 A)

CREATE TABLE [dbo].[A](
[ID] [int] NOT NULL,
[PhID] [int] NULL,
[FromDate] [datetime] NOT NULL,
[ToDate] [datetime] NULL,
CONSTRAINT [PK_A] PRIMARY KEY CLUSTERED
( [ID] ASC,
[FromDate] ASC
)) ON [PRIMARY]

CREATE TABLE [dbo].[B](
[PhID] [int] NOT NULL,
[FromDate] [datetime] NULL,
[ToDate] [datetime] NULL,
CONSTRAINT [PK_B] PRIMARY KEY CLUSTERED
( [PhID] ASC )) ON [PRIMARY]
go

CREATE VIEW C as
SELECT A.ID,
CASE WHEN A.PhID IS NULL THEN A.FromDate ELSE B.FromDate END AS FromDate,
CASE WHEN A.PhID IS NULL THEN A.ToDate ELSE B.ToDate END AS ToDate
FROM A
LEFT OUTER JOIN B ON A.PhID = B.PhID
go

INSERT INTO B (PhID, FromDate, ToDate) VALUES (100, '20100615', '20100715')
INSERT INTO A (ID, PhID, FromDate, ToDate) VALUES (1, NULL, '20100101', '20100201')
INSERT INTO A (ID, PhID, FromDate, ToDate) VALUES (1, 100, '20100615', '20100715')

INSERT INTO B (PhID, FromDate, ToDate) VALUES (101, '20101201', '20101231')
INSERT INTO A (ID, PhID, FromDate, ToDate) VALUES (2, NULL, '20100801', '20100901')
INSERT INTO A (ID, PhID, FromDate, ToDate) VALUES (2, 101, '20101201', '20101231')

所以现在,如果你从 C 中全选,你会得到 4 个单独的日期范围

在 Entity Framework 模型(我称之为“核心”)中,添加了 View “C”。

在 MVC Controller 中:
public class HomeController : Controller
{
public ActionResult Index()
{
CoreEntities db = new CoreEntities();
var clist = from c in db.C
select c;

return View(clist.ToList());
}

}

在 MVC View 中:
@model List<RM.Models.C>

@{
foreach (RM.Models.C c in Model)
{
@String.Format("{0:dd-MMM-yyyy}", c.FromDate)
<span>-</span>
@String.Format("{0:dd-MMM-yyyy}", c.ToDate)
<br />
}
}

当我运行所有这些时,它输出:
01-Jan-2010 - 01-Feb-2010
01-Jan-2010 - 01-Feb-2010
01-Aug-2010 - 01-Sep-2010
01-Aug-2010 - 01-Sep-2010

什么时候应该这样做(这是 View 返回的内容):
01-Jan-2010 - 01-Feb-2010
15-Jun-2010 - 15-Jul-2010
01-Aug-2010 - 01-Sep-2010
01-Dec-2010 - 31-Dec-2010

另外,我已经在它上面运行了 SQL 探查器,据此,正在执行的查询是:
SELECT 
[Extent1].[ID] AS [ID],
[Extent1].[FromDate] AS [FromDate],
[Extent1].[ToDate] AS [ToDate]
FROM (SELECT
[C].[ID] AS [ID],
[C].[FromDate] AS [FromDate],
[C].[ToDate] AS [ToDate]
FROM [dbo].[C] AS [C]) AS [Extent1]

哪个返回正确的数据

因此, Entity Framework 似乎同时正在对数据做一些事情。

对我来说,一切看起来都很好!我错过了什么吗?

干杯,


编辑:

抱歉,表 A 应该是:
CREATE TABLE [dbo].[A](
[ID] [int] NOT NULL,
[PhID] [int] NULL,
[FromDate] [datetime] NOT NULL,
[ToDate] [datetime] NULL,
CONSTRAINT [PK_A] PRIMARY KEY CLUSTERED
( [ID] ASC,
[FromDate] ASC
)) ON [PRIMARY]

最佳答案

我自己想通了。

问题在于 View 在实体模型中的映射方式。

添加时,它使实体键成为 ID。我需要它通过 ID 和 FromDate。所以我在实体键中包含了 FromDate 并且它工作正常。

关于asp.net-mvc - MVC Entity Framework 模型未返回正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4496600/

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