Entity framework 在没有从视图推断出键时添加实体键

Entity framework 在没有从视图推断出键时添加实体键,entity-framework,ado.net,Entity Framework,Ado.net,在SQLServer2005中,我有一个跨多个表连接的数据库视图。它看起来像这样: SELECT m1.MenuName AS menu_name, m2.MenuName AS sub_menu_name, p.ProductName, od.amount FROM dbo.tblMenus AS m1 FULL OUTER JOIN dbo.tblMenus AS m2 FULL OUTER JOIN dbo.tblProductsRe

在SQLServer2005中,我有一个跨多个表连接的数据库视图。它看起来像这样:

SELECT     
   m1.MenuName AS menu_name, m2.MenuName AS sub_menu_name, p.ProductName, od.amount
FROM         
   dbo.tblMenus AS m1 
FULL OUTER JOIN
   dbo.tblMenus AS m2 
FULL OUTER JOIN
   dbo.tblProductsRelMenus AS pm ON m2.Id = pm.SubMenuId ON m1.Id = pm.MenuId 
FULL OUTER JOIN
   (SELECT     
       dbo.tblOrderDetails.ProductId, SUM(dbo.tblOrderDetails.Ammount) AS amount
    FROM          
       dbo.tblOrderDetails 
    FULL OUTER JOIN
       dbo.tblOrders AS o ON dbo.tblOrderDetails.OrderId = o.OrderId
    WHERE (o.OrderDestroyed = 0)
    GROUP BY dbo.tblOrderDetails.ProductId) AS od 
RIGHT OUTER JOIN
   dbo.tblProducts AS p ON od.ProductId = p.ProductId ON pm.ProductId = p.ProductId
当我尝试创建ADO.Net实体数据模型时,它会抱怨SSDL中没有主键。然后我发现:

但是我不理解关于定义查询的部分。当然,我只需要一个具有唯一数字的列来定义键,或者

  <EntityType Name="SoldItemsView">
    <Key>
       <PropertyRef Name="SoldItemsViewId" />
    </Key>
    <Property Name="SoldItemsView" Type="int" Nullable="false" />
    <Property Name="menu_name" Type="nvarchar" MaxLength="100" />
    <Property Name="sub_menu_name" Type="nvarchar" MaxLength="100" />
    <Property Name="ProductName" Type="nvarchar" MaxLength="50" />
    <Property Name="amount" Type="int" />
  </EntityType>
但是如何用唯一的数字填充此列

谢谢


Barry

您只能使用视图中的列。若要定义实体键,必须从视图中选择一列或一组列,以唯一标识视图中的记录

你的表现如何。。。我的第一个想法是帮助它,并选择tblMenus主键。为什么选择tblMenus主键会有帮助?性能对我的应用程序来说很好。