2011-12-11 63 views
0

我有跨越多个表的连接SQL Server中的数据库视图推断实体键2005.它看起来是这样的:添加时没有键从视图

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 secion中没有主键。后来我发现这一点:

http://msdn.microsoft.com/en-us/library/dd163156.aspx

,但我不明白有关定义查询的一部分。当然,我只想要一个具有唯一数字的列来定义密钥,或者?

<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> 

但是,如何填充此列中的唯一编号?

感谢,

巴里

+0

你的表现如何查询该视图? ... –

+0

我的第一个想法是帮助它,并选择tblMenus主键。 –

+0

为什么选择tblMenus的主键可以解决这个问题? – Baz

回答

0

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

相关问题