ASP.NET MVCサイトを作成する際に奇妙な問題が発生します。 SQL Serverデータベースにいくつかの日付範囲を返すビューがあります。ビューは、SSMSでクエリを実行するときに正常に動作します。MVCエンティティフレームワークモデルが正しいデータを返さない
ビューデータがEntity Framework Modelによって返されると、正しい行数が返されますが、一部の行は複製されます。あなたがCからすべての選択した場合、(テーブル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', '201')
INSERT INTO A (ID, PhID, FromDate, ToDate) VALUES (2, NULL, '20100801', '20100901')
INSERT INTO A (ID, PhID, FromDate, ToDate) VALUES (2, 101, '20101201', '201')
だから今:
SQL Serverのコードを:
EDITEDをここで
は、私がやっていることの一例です4つの異なる日付範囲が得られます
エンティティフレームワークモデル(「コア」と呼んでいます)では、ビュー「C」が追加されています。 MVCコントローラで
:MVCビューで
public class HomeController : Controller
{
public ActionResult Index()
{
CoreEntities db = new CoreEntities();
var clist = from c in db.C
select c;
return View(clist.ToList());
}
}
:
@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
を(このビューが返すもの):
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]
その間にデータに何かをする。
私には、すべてがうまく見えます!私は何かを逃したか?
乾杯、 ベン
EDIT:
申し訳ありませんが、テーブル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]
おそらく、この質問のMVCの側面は削除する必要があります。これはSQL/EFの問題のようです。 – RPM1984
RPMに感謝します。人々が状況をテストするための簡単な方法を提供したかっただけです。いずれにせよ、私は自分の問題を以下のように解決しました。 – Beno