2010-11-30 18 views
12

Estamos utilizando WCF Data Service basado en un modelo de Entity Framework para nuestra aplicación.HierarchyID en Entity Framework no funciona

En esto tenemos que agregar la tabla con una columna del tipo HierarchyId. Cuando agrego esa tabla al archivo EDMX, la columna HierarchId no aparece en el archivo de clase.

¿Qué debo hacer para utilizar HierarchyID? Leí que Entity Framework no es compatible con HierarchyID, entonces, ¿cómo puedo lograrlo?

+2

Su problema es con EF, no WCF. El problema es que EF no puede representar columnas hierarchyid. – Gabe

+0

Utilicé este pequeño código para facilitar el trabajo con cadenas HierarchyID ... http://stackoverflow.com/questions/3347860/is-there-a-practical-way-to-use-the-hierarchyid- datatype-in-entity-framework-4 – EBarr

+0

@EBarr, Su implementación se ve bien, mi requisito era simplemente usar el HierarchyID existente tal como está. Lo único que hice fue utilizar Columna calculada ya que EF no es compatible. Mediante el uso de una columna calculada, está haciendo su trabajo excelente. – Mohanavel

Respuesta

24

Siempre puede convertir un HierarchyId en su representación de cadena - algo así como /1/3/4/1 - y enviar esa cadena a través del servicio de datos WCF.

Actualización: si se agrega este calcula, persistió columna a la tabla de SQL Server, que la nueva columna debe sin duda aparece en su modelo de EF y usted debería ser capaz de utilizar esto para enviar de nuevo sobre WCF y WCF Data servicios:

ALTER TABLE dbo.YourTable 
ADD HierarchyString AS (your hierarchyID field).ToString() PERSISTED 

actualización # 2:read the docs! Puede analizar una cadena como /1/3/4/1 en un tipo HierarchyId - utilice HierarchyId::Parse(string) o los métodos habituales CAST(string as HierarchyId) para hacerlo.

+0

Como dije antes, al agregar la tabla al archivo EDMX, el campo hierarchyId no aparece. Entonces, ¿tengo que tener el método en el archivo svc e insertar usando la consulta "insertar en ..."? – Mohanavel

+1

OK, esto se puede usar como getter, ¿qué tal setter? Probé el setter tipo de cosas. Si setter es posible, todo se puede hacer de una manera más simple. Al usar esto, puedo obtener los datos. Gracias marc_s. – Mohanavel

+0

@Mohanavel: actualicé mi respuesta una vez más ..... –

10

Si utiliza la columna calculada Hemos de tener en cuenta que también necesitará la anotación de datos DatabaseGenerated en su propiedad como esta:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
public string HierarchyString { get; set; } 

Comprobar este artículo a cabo para obtener más información: Entity Framework Code First Computed Properties

Cuestiones relacionadas