詳解介紹升級后的ADO.NET Entity Framework Beta3
升級到ADO.NET Entity Framework Beta3時,一般使用DataAdapter(也可能是CommandBuilder)與數(shù)據(jù)源交互,用DataView對DataSet中的數(shù)據(jù)進行排序和過濾。DataSet可以被繼承來建立強化類型的DataSet,用于暴露表、行、列作為強化類型對象屬性。
在ADO.NET Entity Framework Beta3中,New一個"ADO.NET Entity Data Model"。打開生成的SSDL文件,隨便看一個EntitySet節(jié)點:
- <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]"前綴。再來看看創(chuàng)建上面的EDM后會在config里生成的節(jié)點:
- <connectionStrings>
- <add name="UserRightEntities" connectionString="metadata=res://*/
- UserRight.csdl|res://*/UserRight.ssdl|res://*/UserRight.msl;provider=System.Data.SqlClient;provider connection string="
- Data Source=xxxxserver;Initial Catalog=xxxx;Persist
- Security Info=True;User ID=sa;Password=xxxxxx;MultipleActiveResultSets=False"" providerName="System.Data.EntityClient" />
- </connectionStrings>
OK, 現(xiàn)在我在數(shù)據(jù)庫中創(chuàng)建了一個用戶:Inrie, 然后以這個用戶的身份創(chuàng)建一個Tenant表。這時候數(shù)據(jù)庫中就有兩個Tenant表:[dbo].[Tenant]和[inrie].[Tenant]。
通常情況下,我們都認(rèn)為:通過設(shè)置連接字符串的User ID的值,ADO.NET Entity Framework Beta3訪問EDM獲取到的數(shù)據(jù)應(yīng)該就是當(dāng)前用戶下表的數(shù)據(jù)。也就是我設(shè)置User Id=inrie, 我就希望我得到的是[inrie].[Tenant]表的數(shù)據(jù)。
但是看看最上面生成的EntitySet信息,發(fā)現(xiàn)它已經(jīng)自作主張的給你加了[dbo]前綴了,這樣導(dǎo)致你無論設(shè)置的User ID是什么值,獲取到的都是[dbo].[Tenant]的數(shù)據(jù)。
對此,我在想是否可以在創(chuàng)建 "ADO.NET Entity Data Model" 時做一些設(shè)置,使得不生成這個。#t#
是查看了所有屬性,沒有很好對策。ADO.NET Entity Framework Beta3當(dāng)然要想實現(xiàn)需求也不是沒有辦法,可以手動的把"[dbo]"前綴去掉,但是這畢竟不是根本上的解決方法。