无法将视图添加到EF数据模型

Sal*_*leh 34 entity-framework visual-studio-2008-sp1

我有一个观点,我正在尝试添加到我的ADO.NET实体数据模型.每次我尝试从数据库更新并检查视图时,它会刷新其他所有内容,但不会添加视图.我没有得到任何错误消息或输出,所以我不知道视图有什么问题.其他视图没问题.我错过了什么,有没有办法打开错误信息?visual studio 2008 sp1

更新 :我找到了这个链接,但这些解决方案没有解决问题. MSDN论坛

更新:我无法添加的视图将从另一个视图查询.

更新:帮助

WITH cte AS (SELECT     dbo.TBL_Gharardad.PK_Shenase, dbo.TBL_Gharardad.FK_NoeKhedmat AS NoeKhedmatId, 
                                                    dbo.TBL_NoeKhedmat.NoeKhedmat AS [??? ????], dbo.TBL_Gharardad.OnvaneKhedmat AS [????? ????], 
                                                    dbo.TBL_Gharardad.MahaleEraeieKhedmat AS [??? ????? ????], 
                                                    dbo.TBL_Gharardad.FK_NahveieTaieeneBarande AS NahveieTaeeneBararndeId, 
                                                    dbo.TBL_NahveieTaieeneBarande.NahveieTaieeneBarande AS [???? ????? ?????], 
                                                    dbo.TBL_Gharardad.TarikheShorooeGharardad_Jalali AS [????? ???? ???????], 
                                                    dbo.TBL_Gharardad.TarikhePayaneGharardad_Jalali AS [????? ????? ???????], dbo.TBL_Gharardad.FK_VahedeArz AS VahedeArzId, 
                                                    dbo.TBL_VahedeArz.VahedeArz AS [???? ???], dbo.TBL_Gharardad.MablagheDariaftiKol AS [???? ??????? ??], 
                                                    dbo.TBL_Gharardad.MablaghePardakhtieKol AS [???? ??????? ??], dbo.TBL_Gharardad.SahmeKarfarma AS [???? ?????? ???????], 
                                                    100 - dbo.TBL_Gharardad.SahmeKarfarma AS [???? ?????? ????????], dbo.TBL_Gharardad.TedadNirooyeMard AS [????? ????? ???], 
                                                    dbo.TBL_Gharardad.TedadNirooyeZan AS [????? ????? ??], 
                                                    dbo.TBL_Gharardad.TedadNirooyeMard + dbo.TBL_Gharardad.TedadNirooyeZan AS [????? ?? ??????], 
                                                    dbo.TBL_Gharardad.FK_TarafeGharardad AS TarafeGharardadId, 
                                                    CASE TBL_TarafeGharardad.Hoghooghi WHEN 0 THEN ISNULL(TBL_TarafeGharardad.Naam, ' ') 
                                                    + ' ' + ISNULL(TBL_TarafeGharardad.NaameKhanevadegi, ' ') ELSE TBL_TarafeGharardad.NameSherkat END AS [??? ???????], 
                                                    dbo.TBL_Gharardad.FK_VahedeVagozarKonande AS VahedeVagozarKonandeId, 
                                                    dbo.TBL_VahedeVagozarKonande.VahedeVagozarKonande AS [???? ?????? ?????], dbo.TBL_Gharardad.ShomareGharardad AS [????? ???????], 
                                                    dbo.TBL_Gharardad.TarikheGharardad_Jalali AS [????? ???????], 
                                                    CASE VaziateGharardad WHEN 0 THEN N'??? ???' WHEN 1 THEN N'??? ?????' WHEN 2 THEN N'???' WHEN 3 THEN N'??? ????? ' WHEN 4 THEN
                                                     N' ???? ' WHEN 5 THEN N'???? ??? ' WHEN 6 THEN N' ???? ' END AS [????? ???????], dbo.TBL_NoeMoamele.NoeMoamele AS [??? ??????]
                             FROM          dbo.TBL_Gharardad INNER JOIN
                                                    dbo.TBL_NoeKhedmat ON dbo.TBL_Gharardad.FK_NoeKhedmat = dbo.TBL_NoeKhedmat.PK_Id INNER JOIN
                                                    dbo.TBL_NahveieTaieeneBarande ON 
                                                    dbo.TBL_Gharardad.FK_NahveieTaieeneBarande = dbo.TBL_NahveieTaieeneBarande.PK_Id INNER JOIN
                                                    dbo.TBL_VahedeArz ON dbo.TBL_Gharardad.FK_VahedeArz = dbo.TBL_VahedeArz.PK_Id INNER JOIN
                                                    dbo.TBL_TarafeGharardad ON dbo.TBL_Gharardad.FK_TarafeGharardad = dbo.TBL_TarafeGharardad.PK_Id INNER JOIN
                                                    dbo.TBL_VahedeVagozarKonande ON 
                                                    dbo.TBL_Gharardad.FK_VahedeVagozarKonande = dbo.TBL_VahedeVagozarKonande.PK_Id INNER JOIN
                                                    dbo.TBL_NoeMoamele ON dbo.TBL_Gharardad.FK_NoeMoamele = dbo.TBL_NoeMoamele.PK_Id)
    SELECT     v_Gharardad.?????, v_Gharardad.NoeKhedmatId, v_Gharardad.[??? ????], v_Gharardad.[????? ????], v_Gharardad.[??? ????? ????], 
                            v_Gharardad.NahveieTaeeneBararndeId, v_Gharardad.[???? ????? ?????], v_Gharardad.[????? ???? ???????], v_Gharardad.[????? ????? ???????], 
                            v_Gharardad.VahedeArzId, v_Gharardad.[???? ???], v_Gharardad.[???? ??????? ??], v_Gharardad.[???? ??????? ??], v_Gharardad.[???? ?????? ???????], 
                            v_Gharardad.[???? ?????? ????????], v_Gharardad.[????? ????? ???], v_Gharardad.[????? ????? ??], v_Gharardad.[????? ?? ??????], 
                            v_Gharardad.TarafeGharardadId, v_Gharardad.[??? ???????], v_Gharardad.VahedeVagozarKonandeId, v_Gharardad.[???? ?????? ?????], 
                            v_Gharardad.[????? ???????], v_Gharardad.[????? ???????], v_Gharardad.[????? ???????], v_Gharardad.[??? ??????]
     FROM         dbo.TBL_Gharardad AS TBL_Gharardad_3 INNER JOIN
                            dbo.v_GharardadRecords AS v_Gharardad ON v_Gharardad.????? = TBL_Gharardad_3.PK_Shenase
     WHERE     (TBL_Gharardad_3.FK_GharardadeAsli IS NULL) AND (TBL_Gharardad_3.PK_Shenase NOT IN
                                (SELECT     FK_GharardadeAsli
                                   FROM         dbo.TBL_Gharardad AS TBL_Gharardad_2
                                   WHERE     (FK_GharardadeAsli IS NOT NULL)))
UNION
SELECT     sub.FK_GharardadeAsli AS ?????, cte_2.NoeKhedmatId, cte_2.[??? ????], cte_2.[????? ????], cte_2.[??? ????? ????], cte_2.NahveieTaeeneBararndeId, 
                      cte_2.[???? ????? ?????], cte_2.[????? ???? ???????], cte_2.[????? ????? ???????], cte_2.VahedeArzId, cte_2.[???? ???], cte_2.[???? ??????? ??], cte_2.[???? ??????? ??], 
                      cte_2.[???? ?????? ???????], cte_2.[???? ?????? ????????], cte_2.[????? ????? ???], cte_2.[????? ????? ??], cte_2.[????? ?? ??????], cte_2.TarafeGharardadId, 
                      cte_2.[??? ???????], cte_2.VahedeVagozarKonandeId, cte_2.[???? ?????? ?????], cte_2.[????? ???????], cte_2.[????? ???????], cte_2.[????? ???????], 
                      cte_2.[??? ??????]
FROM         dbo.v_GharardadRecords AS cte_2 INNER JOIN
                          (SELECT     FK_GharardadeAsli, MAX(PK_Shenase) AS PK_Shenase, MAX(TarikheSabt) AS TarikheSabt
                             FROM         dbo.TBL_Gharardad AS TBL_Gharardad_1
                             WHERE     (FK_GharardadeAsli IS NOT NULL)
                             GROUP BY FK_GharardadeAsli) AS sub ON sub.PK_Shenase = cte_2.?????
Run Code Online (Sandbox Code Playgroud)

小智 30

如果您的视图不包含主键列,则它不会添加到edmx文件.

  • 如果视图没有键,那么假一个:SELECT ISNULL(ROW_NUMBER()OVER(ORDER BY MyColumn),0)AS UniqueId ... (3认同)

Adu*_*cci 16

当我尝试添加一个不从另一个表中选择主键的视图时,我遇到了同样的行为.(就像Ladislav Mrnka评论的那样)

我解决这个问题的策略是尽可能简化视图(1列)并尝试添加它.将其添加到模型后,慢慢引入更多列并刷新模型以确保视图仍然存在.您通常可以确定视图的哪个部分正在提供EDM问题.


小智 14

同样的问题,我做的是在View上添加PrimaryKey,使用:

..... (SELECT      TOP (100) PERCENT ROW_NUMBER() OVER (ORDER BY R.Road DESC) AS RoadNumber......
Run Code Online (Sandbox Code Playgroud)

然后我不得不做一个CAST:

ISNULL (CAST(RoadNumber AS INT),0)AS RoadNumber
Run Code Online (Sandbox Code Playgroud)

该列必须(不为空),这就是最后CAST的原因.


Axi*_*ili 6

在我的情况下,这是因为OUTER JOIN.
这会导致列可以为空,并且不能由EF导入.

当我把它改成INNER JOIN时它起作用了.

另一种方法是使用ISNULL(参见这篇文章的答案)


Tom*_*ada 5

为了能够将视图添加到模型中,实体框架需要在数据库视图中至少有一列不可为空