none
[Column(TypeName = "blob")] y [Column(TypeName = "image")] RRS feed

  • Pregunta

  • Hola, tengo una aplicacion con Entity Framework Code First.
    Al iniciar la aplicacion si detecta que no hay cadena de conexion, entonces le permite al usuario introducir datos de conexion, sin importar si es sql server o mysql, todo funciona OK, solo un campo Foto en la entidad PerfilDeUsuario, para sql server se especifica con data annotations asi:
    [Column(TypeName = "image")]

    Mientras que para MySQL

    [Column(TypeName = "blob")]Mi duda es si puedo declarar de alguna manera que dinamicamente pueda establecer o si puedo hacer algo parecido a esto:
    [Column(TypeName = "blob"), Column(TypeName = "image")]

    viernes, 20 de julio de 2012 4:30

Todas las respuestas

  • hola

    si usas Code First en lugar de usar atributos porque no usas fluent para configurar

    con fluent podrias agregar dinamismo en el codigo para cambiar la config del mapeo segun sea necesario

    ademas si defines una propiedad del tipo byte[] no necesitas definir el tipo de columna

     Associations in EF Code First: Part 4 – Table Splitting

    analiza el ejemplo alli dfine un campo para la imagen pero no especifca que es del tipo image o blob solo dice que es byte[]

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 20 de julio de 2012 6:14
  • Hola leandro, muchas gracias por ayudar mucho a la comunidad, estube leyendo un poco los links y pues si efectivamente con Fluent API puedes jugar con codigo y tomar alguna bandera de los settings como: CampoBytes = "image" o "blob", y en el map de esa entidad puedes asignarle lo que diga en settings, pero tebia la duda si alguien sabe con data annotations hay forma de hacer algo parecido?, por que pregunto esto, por que yo generalmente obto mas por data annotations, y ademas uso fluent api pero fluent api solo pongo los mapeos que no logro poder con data annotations, y antes de irme a poner lo de la foto en fluent api.. quieor descartar que no se pueda o que no encuentre info para data annotations.

    En el ejemplo donde no le ponen el campo en los bytes[] por defecto en sql server 2008 te lo pone en un tipo de campo barbymary o algo parecido no recuerdo bien, y puede que funcione normal pero si no le dices nada en mysql te da un error.

    en SQLite igual, Oracle no lo he provado.

    De todas formas gracias leandro por el aporte, investigare si no hay nada para data a.. y si no encuentro pues tendre que hacerlo con fluent.

    Observacion:
    Se que no puedo tener todo en data annotatio y si pudiera twener todo en fluent api, pero prefiero usar data annotations y solo usar fluent api para las cosas a las que no se puedne resolver, Estoy mas comodo con data annotations por que en mi caso me es mas comodo directo a la entidad marcarla con anotaciones que sirven para dos cosas: 1.- para la creacion en la bd y para validaciones de UI, es mas facil parami abrir la entidad paises y ver luego luego cual es su max length o si es requerida o no, y hasta su mensage de error. Cosa que con fluent api tendria que abrir el map para verlo.

    hehe espero si alguien sabe sobre data annotations comenten :D
    viernes, 20 de julio de 2012 18:31
  • pero fluent api solo pongo los mapeos que no logro poder con data annotations

    pero deberias hacer al contrario, definir todo por fluent y lo que no puedes por este usarlo en atributos

    fluent es menor intrusivo en la definicion de la entidad

    en los bytes[] por defecto en sql server 2008 te lo pone en un tipo de campo barbymary o algo parecido no recuerdo bien, y puede que funcione normal pero si no le dices nada en mysql te da un error.

    podrias probar usar

    How to store images using Entity Framework Code First CTP 5?

    o sea

    modelBuilder.Entity<Product>().Property(p => p.Image).HasColumnType("image");

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 20 de julio de 2012 18:48
  • Yo lo manejo alrevez por que:
    Puedes llegar a muchas mas cosas con fluent api que con data annotations

    Pero las configuraciones en las que aplicas data annotations, automaticamente se pueden ligar con validaciones de UI con mvc u otros.

    Por ejemplo la presicion en decimales, con data annotations no se puede, salvo que qurees tus ropios atributos o extiendas, pero es mas complicado,

    cosa que con fluent api es muy sencillo.
    Entonces mis entidades las lleno de data annotations y ademas le creo su map con fluent api pero en el fluent solo le indico la propiedad decimal y su precision.

    Por eso me gusta mas usar data annotations, y las cosas que no logras con data annotations, esas usar fluent api.

    Pero muchas gracias por tu apoyo :D se agradece mucho que estes pendiente de las dudas de usuarios.

    viernes, 20 de julio de 2012 19:15