2010-01-01 25 views
25

Quiero crear una propiedad personalizada en una de mis entidades mapeadas desde la base de datos, sin embargo esta propiedad no está mapeada a la base de datos, creé la propiedad usando clases parciales pero cuando trato de compilar recibo un error que me dice que la propiedad no está mapeada. ¿Hay algún atributo o algo que deba agregar? Gracias por adelantado.Creando una propiedad no mapeada en una entidad (entidad framework)

+3

Usar clases parciales es la forma correcta de hacerlo, y funciona bien para mí. Debe mostrar su código, sus asignaciones y el error exacto, ya que lo que ha descrito hasta ahora ya funciona. –

Respuesta

7

Use clases parciales para agregar las propiedades o los métodos que desee agregar. P.ej.

namespace WhateverNamespaceYourEntityModelIsIn 
{ 
    public partial class TheNameOfYourEntity 
    { 
      public string MyNewProperty { get; set; } 
    } 
} 

y eso le conviene.

+0

si está trabajando con Code First, lea más abajo – bkwdesign

+1

esta es una respuesta incorrecta en el caso de Code First – Toolkit

+0

Para Code First, consulte específicamente la respuesta de Kniganapolke. Use [NotMapped]. –

69

También puede marcar su propiedad con el atributo [NotMapped] o utilizar el método Ignore con la API fluida.

Propiedad

public class EntityName 
{ 
    [NotMapped] 
    private string PropertyName { get; } 
} 

API Fluido

public class Entities : DbContext 
{ 
    public DbSet<EntityType> Users { get; set; } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Some database configuration 
     modelBuilder.Entity<EntityType>() 
      .Ignore(i => i.PropertyName); 
    } 
} 
+0

esta es una buena solución cuando desea agregar propiedades al objeto de entidad pero no las quiere asociadas a la base de datos o al archivo de asignación – mknopf

+0

Usar el atributo [NoModificado] es la manera más fácil de hacerlo si tiene una propiedad que necesita en todas las entidades como EntityState que declaras en una clase base. No es necesario editar cada clase de configuración y recuerda hacerlo cada vez que se introduce una nueva entidad. –

+0

Hola, gracias por tu respuesta. Pero cuando lo intento, aparece: "No admite el valor sin tipo en el tipo no abierto". ¿Qué estoy haciendo mal? – Toodoo

1

Estoy seriamente tarde para la conversación, pero también quiero marcar el parcial como serializable y la propiedad como serializable - si alguna vez planea JSON o serializar los objetos:

[Serializable()] 
public partial class MyClass { 
    private System.Nullable<int> _Age; 
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 4)] 
    public System.Nullable<int> Age { 
      ... 
    } 
} 

Se necesitan las directivas [Serializable()] y [global:]. Si excluía [global:], en cualquier momento que lo serializara, sería ignorado y no incluido en la serialización.

+0

¡Excelente! Estuve dando vueltas durante tanto tiempo tratando de descubrir por qué solo una de las variables publicadas siempre era nula. Esto hizo el truco! ¡Gracias! – RobDigital

0

Esta página realmente me ayudó. Añadiré exactamente lo que agregué a mi configuración de mapeo después de ver la respuesta de Kniganapolke.

public TheObjectName() 
    { 
     this.HasKey(t => t.ID); 
     this.Ignore(t => t.IsProcess); //we don't want EF to worry about this 
    } 

Gracias a todos, gracias SO!

Cuestiones relacionadas