ADO.NET Entity Framework Beta3的一些问题

在ADO.NET Entity Framework Beta3中,New一个"ADO.NET Entity Data Model"。打开生成的SSDL文件,随便看一个EntitySet节点:

<EntitySet Name="Tenant" EntityType="SAASModel.Store.Tenant">
    
<DefiningQuery>
              SELECT 
             [Tenant].[TenantId] AS [TenantId], 
             [Tenant].[TenantName] AS [TenantName], 
             [Tenant].[DisplayName] AS [DisplayName], 
             [Tenant].[Approved] AS [Approved], 
             [Tenant].[CreateDate] AS [CreateDate], 
             [Tenant].[EndDate] AS [EndDate], 
             .......
          FROM
               [dbo].[Tenant] AS [Tenant]
   
</DefiningQuery>
</EntitySet>


看看上面突出显示的"[dbo].[Tenant] AS [Tenant]",注意这里多出了"[dbo]"前缀。

再来看看创建上面的EDM后会在config里生成的节点:

<connectionStrings>
    <add name="UserRightEntities" connectionString="metadata=res://*/UserRight.csdl|res://*/UserRight.ssdl|res://*/UserRight.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=xxxxserver;Initial Catalog=xxxx;Persist Security Info=True;User ID=sa;Password=xxxxxx;MultipleActiveResultSets=False&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

OK, 现在我在数据库中创建了一个用户:Inrie, 然后以这个用户的身份创建一个Tenant表。这时候数据库中就有两个Tenant表:[dbo].[Tenant]和[inrie].[Tenant]。

通常情况下,我们都认为:通过设置连接字符串的User ID的值,访问EDM获取到的数据应该就是当前用户下表的数据。也就是我设置User Id=inrie, 我就希望我得到的是[inrie].[Tenant]表的数据。

但是看看最上面生成的EntitySet信息,发现它已经自作主张的给你加了[dbo]前缀了,这样导致你无论设置的User ID是什么值,获取到的都是[dbo].[Tenant]的数据。

对此,我在想是否可以在创建 "ADO.NET Entity Data Model" 时做一些设置,使得不生成这个[dbo],但是查看了所有属性,没有很好对策。当然要想实现需求也不是没有办法,可以手动的把"[dbo]"前缀去掉,但是这毕竟不是根本上的解决方法。

希望在正式版中有所改进。

作者:Inrie (洪晓军)
出处:http://www.cnblogs.com/inrie

posted on 2008-04-29 20:27  Inrie  阅读(815)  评论(4编辑  收藏  举报