2011-02-18 16 views
9

pregunta bastante sencilla. Tengo un modelo que tiene una propiedad que es un tipo System.Uri. Uri s no tienen un constructor sin parámetros predeterminado y ningún campo ID. ¿Hay alguna manera de anular la generación de mi modelo para almacenarla en la base de datos de forma personalizada (por ejemplo, como string)? En NHibernate, hice esto antes al implementar IUserType, pero no pude encontrar un mecanismo similar en CodeFirst.Mapa System.Uri utilizando Entity Framework Fluido Api

Obviamente, podría crear un tipo personalizado que utiliza un Uri bajo el capó y expone regularmente propiedades mapeables & constructor, tengo curiosidad si hay alguna manera de asignar este tipo de sistema de modo que yo no tengo que hacer un envoltorio como ese.

Respuesta

7

EF no admite asignaciones de tipo personalizado como NH.

Para System.Uri, en particular, que haría uso de una propiedad de la envoltura y el mapa el valor real como una cadena; No está tan mal.

+0

Sí, lo que terminó haciendo fue simplemente utilizando una cadena y luego haciendo un atributo de validación de tipo de datos. – Paul

+0

A partir del 5 de Entity Framework enumeraciones son compatibles – Odys

+0

Creo que tienen el apoyo de 6, no –

0

Intenta hacer esto ..

[Column(Name="MyUri", TypeName="string")] 
public Uri MyUri 

Asegúrese de agregar la referencia necesaria para la columna de atributos

using System.ComponentModel.DataAnnotations; 

Espero que ayude ...

+0

Sólo quería asegurarse de que yo estoy refiriendo a CTP5 del Código de EF Primera –

+6

No hay alegría, esto no funcionó. Aún recibo el error "No se pudo completar la ida de la entidad". – Paul

2

Desafortunadamente, no hay manera directa a mapa System.Uri a string con EF.

Se puede sin embargo utilizar las anotaciones de datos y atributos de su propiedad URL de la siguiente manera:

[DataType(DataType.Url)] 
public string Link { get; set; } 

Este será capaz de decirle a algunos servicios que esto se debe mostrar y validado como una dirección URL (ASP.NET y Silverlight, por ejemplo, han construido en apoyo para ello).

Cuestiones relacionadas