を働いていないので、私が最も可能性が高い私はすでにこのことを知って、何か間違ったことがあります。私はちょうど正確に何が間違っているか把握することができません。私はこの2つの異なる方法を試しましたが、私はそれぞれの方法から異なる結果を得ています。 さて、ここで私は、ビューのデータを取得するストアドプロシージャを使用しようとしています、行きます。ASP.NET MVCとストアドプロシージャは、正しく
public class CharacterCraftNamesListViewModel
{
public string CharFullName { get; set; }
public string ProfName { get; set; }
}
と
public class CharacterCraftCraftListViewModel
{
public string CraftClassName { get; set; }
public int CharCraftCharID { get; set; }
public int CharCraftClassID { get; set; }
public int CharCraftLevelID { get; set; }
public bool CraftLevelSet { get; set; }
public string CraftLevelName { get; set; }
public bool CraftLevelMastery { get; set; }
}
は、私はまた、データベースに2つの対応するストアドプロシージャを持っている:私は、次のような二つのビューモデルを持っています。
CREATE PROCEDURE [dbo].[GetCharacterCraftCharacterNameProfessionName]
@CharID int = NULL
AS
WITH CHCRNames_CTE ([CCCID], [CharFull], [ProfName])
AS
(SELECT
Character_Char_ID,
CASE
WHEN b.Char_Last_Name IS NULL THEN b.Char_First_Name
ELSE b.Char_First_Name + ' ' + b.Char_Last_Name
END AS FullName,
c.Profession_Name
FROM CharacterCraft a LEFT OUTER JOIN
[Character] b ON a.Character_Char_ID = b.Char_ID LEFT OUTER JOIN
[Profession] c ON c.Profession_ID = b.Profession_Profession_ID
)
SELECT DISTINCT CharFull, ProfName
FROM CHCRNames_CTE
WHERE CCCID = @CharID
と私のコントローラ内部
CREATE PROCEDURE [dbo].[GetCharacterCraftRank]
@CharID int = NULL,
@Rank int = NULL
AS
WITH CHCR_CTE ([Rank], [CCID], [CCCCID], [CCName], [CLCLID], [CLName], [CLTier], [CLS], [CLM])
AS
(SELECT
DENSE_RANK() OVER(PARTITION BY(a.Character_Char_ID)ORDER BY (a.CraftClass_Craft_Class_ID)) AS [Rank],
a.Character_Char_ID,
CraftClass_Craft_Class_ID,
c.Craft_Class_Name,
CraftLevel_Craft_Level_ID,
d.Craft_Level_Name,
d.Craft_Level_Tier,
Craft_Level_Set,
Craft_Level_Mastery
FROM CharacterCraft a LEFT OUTER JOIN
[Character] b ON a.Character_Char_ID = b.Char_ID LEFT OUTER JOIN
[CraftClass] c ON a.CraftClass_Craft_Class_ID = c.Craft_Class_ID LEFT OUTER JOIN
[CraftLevel] d ON a.CraftLevel_Craft_Level_ID = d.Craft_Level_ID
)
SELECT [CCID], [CCCCID], [CCName], [CLCLID], [CLS], [CLName], [CLM]
FROM CHCR_CTE
WHERE [CCID]= @CharID AND [Rank] = @Rank
ORDER BY [Rank], [CLTier]
私は、次のしている:
public async Task<ActionResult> Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var names = await db.Database.SqlQuery<CharacterCraftNamesListViewModel>(sql: "GetCharacterCraftCharacterNameProfessionName", parameters: new object[] { id }).ToListAsync();
var alist = await db.Database.SqlQuery<CharacterCraftCraftListViewModel>(sql: "GetCharacterCraftRank", parameters: new object[] { id, 1 }).ToListAsync();
var blist = await db.Database.SqlQuery<CharacterCraftCraftListViewModel>(sql: "GetCharacterCraftRank", parameters: new object[] { id, 2 } ).ToListAsync();
var clist = await db.Database.SqlQuery<CharacterCraftCraftListViewModel>(sql: "GetCharacterCraftRank", parameters: new object[] { id, 3 } ).ToListAsync();
var characterCraft = new CharacterCraftViewModel()
{
CharNames = names.AsEnumerable(),
CraftListA = alist.AsEnumerable(),
CraftListB = blist.AsEnumerable(),
CraftListC = clist.AsEnumerable()
};
if (characterCraft == null)
{
return HttpNotFound();
}
return View(characterCraft);
}
私は以下を参照してくださいデバッガを見て:
- ID 1
- 名がカウント= 0
- 連想リストカウント= 0
- blistカウント= 0
- CLISTカウント= 0
- characterCraft
{LotroMvc.Models.CharacterCraftViewModels.CharacterCraftViewModel}これにだから
私は空白のページを得ることに終わります。
は、今は、コントローラ自体にストアドプロシージャを配置しようとしている、およびデバッガに異なる出力になってしまっています。
public async Task<ActionResult> Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var query = "WITH CHCRNames_CTE([CCCID], [CharFull], [ProfName]) "
+ "AS "
+ "(SELECT "
+ "Character_Char_ID, "
+ "CASE "
+ "WHEN b.Char_Last_Name IS NULL THEN b.Char_First_Name "
+ "ELSE b.Char_First_Name + ' ' + b.Char_Last_Name "
+ "END AS FullName, "
+ "c.Profession_Name "
+ "FROM CharacterCraft a LEFT OUTER JOIN "
+ "dbo.[Character] b ON a.Character_Char_ID = b.Char_ID LEFT OUTER JOIN "
+ "dbo.[Profession] c ON c.Profession_ID = b.Profession_Profession_ID "
+ ") "
+ "SELECT DISTINCT CharFull, ProfName "
+ "FROM CHCRNames_CTE "
+ "WHERE CCCID = @p0";
var names = await db.Database.SqlQuery<CharacterCraftNamesListViewModel>(query, id).ToListAsync();
var rank = "WITH CHCR_CTE([Rank], [CCID], [CCCCID], [CCName], [CLCLID], [CLName], [CLTier], [CLS], [CLM])"
+ "AS "
+ "(SELECT "
+ "DENSE_RANK() OVER(PARTITION BY(a.Character_Char_ID)ORDER BY (a.CraftClass_Craft_Class_ID)) AS [Rank], "
+ "a.Character_Char_ID, "
+ "CraftClass_Craft_Class_ID, "
+ "c.Craft_Class_Name, "
+ "CraftLevel_Craft_Level_ID, "
+ "d.Craft_Level_Name, "
+ "d.Craft_Level_Tier, "
+ "Craft_Level_Set, "
+ "Craft_Level_Mastery "
+ "FROM CharacterCraft a LEFT OUTER JOIN "
+ "[Character] b ON a.Character_Char_ID = b.Char_ID LEFT OUTER JOIN "
+ "[CraftClass] c ON a.CraftClass_Craft_Class_ID = c.Craft_Class_ID LEFT OUTER JOIN "
+ "[CraftLevel] d ON a.CraftLevel_Craft_Level_ID = d.Craft_Level_ID "
+ ") "
+ "SELECT [CCID], [CCCCID], [CCName], [CLCLID], [CLS], [CLName], [CLM] "
+ "FROM CHCR_CTE "
+ "WHERE [CCID]= @p0 AND [Rank] = @p1 "
+ "ORDER BY [Rank], [CLTier]";
var alist = await db.Database.SqlQuery<CharacterCraftCraftListViewModel>(rank, parameters: new object[] { id, 1 }).ToListAsync();
var blist = await db.Database.SqlQuery<CharacterCraftCraftListViewModel>(rank, parameters: new object[] { id, 2 } ).ToListAsync();
var clist = await db.Database.SqlQuery<CharacterCraftCraftListViewModel>(rank, parameters: new object[] { id, 3 } ).ToListAsync();
var characterCraft = new CharacterCraftViewModel()
{
CharNames = names.AsEnumerable(),
CraftListA = alist.AsEnumerable(),
CraftListB = blist.AsEnumerable(),
CraftListC = clist.AsEnumerable()
};
if (characterCraft == null)
{
return HttpNotFound();
}
return View(characterCraft);
}
これは、デバッガで次の私が得られる:
- 本{LotroMvc.Controllers.CharacterCraftsController}
- ID 1
- クエリ「私が試しコントローラ内部
( SELECT Character_Char_ID、CASE b.Char_Last_Name次いでNULLであるようCHCRNames_CTE([CCCID]、[CharFull]、[ProfName])WITH CharacterCraft FROMフルネーム、c.Profession_Name LEFT OUTER
DBOをJOIN AS b.Char_First_Name ELSE b.Char_First_Name + '' + b.Char_Last_Name
END。a.Character_Char_ID = b.Char_ID LEFT OUTER ON [文字] B DBOをc.Profession_ID =
b.Profession_Profession_ID ON [職業] CをJOIN)CCCID = @ P0" 名が[0] {LotroMvc.Models.CharacterCraftViewModels = 1 - カウント CHCRNames_CTE区別CharFull、ProfNameを選択します。CHCR_CTE WITH CharacterCraftNamesListViewModel}
- CharFullNameヌル
- ProfName "歴史"
- ランク」([ランク]、 [CCID]、[CCCCID]、[CCName]、[CLCLID]、[CLName]、[CLTier] [CLS]、 [CLM]) AS OVER((a.CraftClass_Craft_Class_ID)BY PARTITION BY(a.Character_Char_ID)ORDER)(DENSE_RANK(SELECT)を[ランク]、a.Character_Char_ID、CraftClass_Craft_Class_ID、 c.Craft_Class_Name AS 、CraftLevel_Craft_Level_ID、d.Craft_Level_Name、 d.Craft_Level_Tier、Craft_Level_Set、Craft_Level_Masteryから キャラクタークラフト左アウトジョイン[キャラクター] b ON a.Character_Char_ID = b.Char_ID LEFT OUTER [CraftClass] a.CraftClass_Craft_Class_ID = c.Craft_Class_ID LEFT OUTER ON cはJOIN JOIN [CraftLevel] D ON a.CraftLevel_Craft_Level_ID = d.Craft_Level_ID) SELECT [CCID]、[CCCCID] 、[CLName]、 [CLID] CHCR_CTEのどこから[CCID] = @ p0かつ[Rank] = @ p1 ORDER BY [ランク]、[CLTier] " [CLName]、[CLCLID]、[CLS]
- 連想リストカウント= 9
- [0] {LotroMvc.Models.CharacterCraftViewModels.CharacterCraftCraftListViewModel}
- CharCraftCharID 0
- CharCraftClassID 0
- CharCraftLevelID 0
- CraftClassNameヌル
- CraftLevelMastery偽
- CraftLevelNameヌル
- CraftLevelSet連想リスト内のデータはカウントは間違いなく間違っているものの
- (など)
偽それは正しいです。名前には正しいProfNameが表示されますが、CharFullNameには不正なデータが表示されます。だから私はここで何をすべきかと迷っている。私がT-SQLでストアドプロシージャを実行すると、正しいデータが表示されますが、それはサーバだけにあります。私はMVCとSQLを正しく再生することができず、私のコードだと分かっています。私はちょうどコードが間違っているのか分かりません。私が間違っていたところへの思いは?