Pregunta

Estoy tratando de filtrar entidades en función de sus tipos de tienda (tabla o vista).

Tengo 2 entidades en mi proyecto de prueba, la fuente de uno es una tabla y la fuente del otro es una vista.

<EntitySet Name="Test" EntityType="TestModel.Store.Test" store:Type="Tables" Schema="dbo" />
<EntitySet Name="TestView" EntityType="TestModel.Store.TestView" store:Type="Views" store:Schema="dbo" store:Name="TestView">

El ejemplo de código anterior se toma de la sección SSDL del archivo edmx del modelo.

Creo que la información de store: Type en SSDL es lo que necesito, pero no pude encontrar una manera de recuperar ese valor usando la API de framework de entidades.

Cualquier ayuda será apreciada.

¿Fue útil?

Solución

Bueno, puede consultar los metadatos en el SSDL buscando en SSpace o StoreItemCollection.

es decir

var sspaceEntitySets = context.MetadataWorkspace
                       .GetItems<EntityContainer>(DataSpace.SSpace)
                       .First().BaseEntitySets.OfType<EntitySet>();
var entitySet = sspaceEntitySets.First();
var tableType = entitySet
.MetadataProperties["http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Type"]
.Value.ToString();

Desafortunadamente, esto no te ayudará a vincular tus clases a si provienen de una tabla o una vista. Debido a que las Entidades (es decir, las que codifica en CSpace) en lugar de las que describen las formas de la tabla (es decir, las de SSpace) están en CSpace y para saber si una Entidad proviene de una vista o tabla, necesitaría para poder pasar de CSpace EntitySet a SSpace EntitySet a través de la asignación.

Desafortunadamente, el EF no expone CSSPace público (es decir, no hay forma de usar la API para leer el fragmento MSL del EDMX).

Entonces, para hacer esto, tendría que razonar manualmente sobre el elemento MSL, probablemente usando LINQ to XML o algo así.

Espero que esto ayude

Alex

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top