Question

We use EF 3.5, Database first. After I have updated my view, I received next error message:

Error 1 Error 3002: Problem in Mapping Fragment starting at line 866: Potential runtime violation of table vPendingOrders's keys (vPendingOrders.AccountId, vPendingOrders.AccountName, vPendingOrders.ApplicationModeTypeId, vPendingOrders.CampaignWorkflowId, vPendingOrders.EndDate, vPendingOrders.HiddenInGeneralList, vPendingOrders.HiddenInOwnerList, vPendingOrders.InstanceId, vPendingOrders.OrgId, vPendingOrders.StartDate, vPendingOrders.TotalBudget): Columns (vPendingOrders.CampaignWorkflowId, vPendingOrders.InstanceId, vPendingOrders.OrgId, vPendingOrders.AccountId, vPendingOrders.AccountName, vPendingOrders.TotalBudget, vPendingOrders.StartDate, vPendingOrders.EndDate, vPendingOrders.HiddenInGeneralList, vPendingOrders.HiddenInOwnerList, vPendingOrders.ApplicationModeTypeId) are mapped to EntitySet vPendingOrders's properties (vPendingOrders.CampaignWorkflowId, vPendingOrders.InstanceId, vPendingOrders.OrgId, vPendingOrders.AccountId, vPendingOrders.AccountName, vPendingOrders.TotalBudget, vPendingOrders.StartDate, vPendingOrders.EndDate, vPendingOrders.HiddenInGeneralList, vPendingOrders.HiddenInOwnerList, vPendingOrders.ApplicationModeTypeId) on the conceptual side but they do not form the EntitySet's key properties (vPendingOrders.AccountId, vPendingOrders.AccountName, vPendingOrders.ApplicationModeTypeId, vPendingOrders.CampaignWorkflowId, vPendingOrders.EndDate, vPendingOrders.HiddenInGeneralList, vPendingOrders.HiddenInOwnerList, vPendingOrders.InstanceId, vPendingOrders.OrgId, vPendingOrders.SalesRep, vPendingOrders.StartDate, vPendingOrders.TotalBudget).

As you see there is no my new fileds FullName, Email and ContactId

The view looks like this:

CREATE VIEW [dbo].[vPendingOrders]
AS
SELECT     TOP (100) PERCENT wf.CampaignWorkflow.CampaignWorkflowId, wf.CampaignWorkflow.InstanceId, dbo.vCampaigns.OrgId, wf.CampaignWorkflow.CampaignId, 
                  dbo.vCampaigns.AccountId, wf.CampaignWorkflow.HasProposalReview, wf.CampaignWorkflow.HasMediaReview, wf.CampaignWorkflow.HasTraffickingEnabled, 
                  dbo.vCampaigns.AccountName, wf.CampaignWorkflow.HasAuthorizedCreditCard, wf.CampaignWorkflow.HasAppliedForCredit, wf.CampaignWorkflow.HasDrops, 
                  dbo.vCampaigns.TotalBudget, wf.CampaignWorkflow.StateMessage, dbo.vCampaigns.StartDate, dbo.vCampaigns.EndDate, dbo.vCampaigns.OwnerId, 
                  dbo.vCampaigns.OwnerType, dbo.vCampaigns.HiddenInGeneralList, dbo.vCampaigns.HiddenInOwnerList, wf.CampaignWorkflow.ApplicationModeTypeId, 
                  dbo.vCampaigns.SalesRep, dbo.vCampaigns.AdvertiserName,
                   --  new values
                   dbo.vCampaigns.FullName, dbo.vCampaigns.Email, dbo.vCampaigns.ContactId
FROM         wf.CampaignWorkflow INNER JOIN
                  dbo.vCampaigns ON wf.CampaignWorkflow.CampaignId = dbo.vCampaigns.CampaignId
ORDER BY wf.CampaignWorkflow.CampaignWorkflowId DESC

Also I just tried to add just an existing column as alias(duplicate): dbo.vCampaigns.AdvertiserName The result for next 24-th column\property is the same - an error 3002

In properties of that field EntityKey is false and Nullable is true.

I also add here anothe view, from which I take my values:

    SELECT     cam.Campaign.CampaignId, cam.Campaign.OrgId, cam.Campaign.OwnerId,    cam.Campaign.AccountId, 
   -- here they are
   cam.Campaign.ContactId, SalesRep.FullName, SalesRep.Email, 
 cam.Campaign.AgencyId, 
                          cam.Campaign.CampaignName, Advertiser.AccountName, Agency.AccountName AS AgencyName, cam.CampaignStatus.Code AS Type, 
                          cam.Campaign.OwnerType, cam.Campaign.StartDate, cam.Campaign.EndDate, dbo.fnGetCampaignRunStatus(cam.Campaign.CampaignId, NULL) 
                          AS Status, wf.CampaignWorkflow.StateMessage, wf.CampaignWorkflow.CampaignWorkflowId, cam.Campaign.TotalBudget, 
                          cam.Campaign.HiddenInGeneralList, cam.Campaign.HiddenInOwnerList, cam.Campaign.Note, 
                          CASE WHEN wf.CampaignWorkflow.ApplicationModeTypeId = 2 THEN CASE WHEN SalesRep.ContactId IS NULL 
                          THEN Owner.FullName ELSE SalesRep.FullName END ELSE CASE WHEN SalesRep.ContactId IS NULL 
                          THEN 'N/A' ELSE SalesRep.FullName END END AS SalesRep, CASE WHEN wf.CampaignWorkflow.ApplicationModeTypeId IS NULL 
                          THEN 1 ELSE wf.CampaignWorkflow.ApplicationModeTypeId END AS ApplicationModeTypeId, 
                          con.CustomListItem.CustomListItemName AS AdvertiserName, cam.Campaign.ClientOrderId
    FROM         cam.Campaign INNER JOIN
                          org.Account AS Advertiser ON cam.Campaign.AccountId = Advertiser.AccountId INNER JOIN
                          cam.CampaignStatus ON cam.Campaign.CampaignStatusId = cam.CampaignStatus.CampaignStatusId INNER JOIN
                          con.Contact AS Owner ON cam.Campaign.OwnerId = Owner.ContactId LEFT OUTER JOIN
                          con.CustomListItem ON cam.Campaign.AdvertiserId = con.CustomListItem.CustomListItemId LEFT OUTER JOIN
                          wf.CampaignWorkflow ON cam.Campaign.CampaignId = wf.CampaignWorkflow.CampaignId LEFT OUTER JOIN
                          org.Account AS Agency ON cam.Campaign.AgencyId = Agency.AccountId AND cam.Campaign.AgencyId = Agency.AccountId LEFT OUTER JOIN
                          con.Contact AS SalesRep ON cam.Campaign.SalesRepId = SalesRep.ContactId

enter image description here

Était-ce utile?

La solution

The reason was in strange update result of EF model update operation. SaleRep in view (database) is still a key, but in model view it was deleted(automatically) from set of keys. But not everywhere or something else... So the solution - Set Entity Key to False and Nullable to True not for new fields, But for SalesRep

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top