J'ai une vue que j'essaie d'ajouter à mon modèle de données d'entité ADO.NET. Chaque fois que j'essaie de mettre à jour depuis la base de données et de vérifier la vue, tout le reste est actualisé, mais la vue n'est pas ajoutée. Je ne reçois aucun message d'erreur ni de sortie, je ne sais donc pas ce qui ne va pas dans la vue. Les autres vues ne posent aucun problème.Am manque quelque chose, puis-je activer les messages d'erreur? Visual studio 2008 sp1
Mise à jour: J'ai trouvé ce lien mais le problème n'a pas été résolu avec ces solutions . Forum MSDN
Update: La vue que je ne peux pas ajouter interrogera une autre vue.
Mise à jour: Aide
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.شناسه
J'ai rencontré le même comportement lorsque j'essayais d'ajouter une vue qui ne sélectionnait pas une clé primaire dans une autre table. (Comme l'a commenté Ladislav Mrnka)
Ma stratégie pour résoudre ce problème consiste à réduire au maximum la vue (1 colonne) et à essayer de l’ajouter. Une fois que vous l'avez ajouté au modèle, importez lentement plus de colonnes et actualisez le modèle pour vous assurer que la vue est toujours présente. Vous pouvez généralement identifier quelle section de la vue pose des problèmes de GED.
Si votre vue ne contient pas la colonne de clé primaire, elle ne sera pas ajoutée au fichier edmx.
Même problème ici, ce que j’ai fait est d’ajouter la clé primaire à la vue, en utilisant:
..... (SELECT TOP (100) PERCENT ROW_NUMBER() OVER (ORDER BY R.Road DESC) AS RoadNumber......
Et puis je devais faire un CAST de ceci:
ISNULL (CAST(RoadNumber AS INT),0)AS RoadNumber
La colonne doit être (non nulle), c'est pourquoi CAST à la fin.
Dans mon cas, c'était à cause d'un OUTER JOIN.
Cela rend les colonnes nullables et ne peuvent pas être importées par EF.
Quand je l'ai changé en INNER JOIN, cela a fonctionné.
Une autre méthode consiste à utiliser ISNULL (voir la réponse à cet article )
Pour pouvoir ajouter une vue dans un modèle, Entity Framework a besoin qu'au moins une colonne de la vue de base de données soit non nullable .
Vérifiez si votre vue est bien affichée dans un fichier * .edmx.
Correct:
<EntitySet Name="SomeView" EntityType="Model.SomeView" store:Type="Views" Schema="dbo" />
Faux:
<EntitySet Name="SomeView" EntityType="Model.SomeView" store:Type="Tables" Schema="dbo" />
Vous pouvez ajouter un nombre de lignes à la vue et lui donner l’apparence d’un champ clé "Id" qui n’est pas null. Un exemple:-
SELECT DISTINCT
-- dumb key for EF in C#
IsNull(cast(ROW_NUMBER() OVER(PARTITION BY [Notes] ORDER BY [Notes] ASC) as int), 0) as [Id]
-- required fields
,[Notes] as [Notes]
,Count([Notes]) as [NoteCount]
FROM
[dbo].[Communication]
GROUP BY
[Notes]
Vous ajoutez le champ que la clé primaire dans votre vue, entité est méchant avec elle