web-dev-qa-db-fra.com

Exclure un champ/une propriété de la base de données avec Entity Framework 4 et Code-First

J'aimerais savoir s'il existe un moyen d'exclure certains champs de la base de données. Pour par exemple:

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string FatherName { get; set; }

    public bool IsMale { get; set; }
    public bool IsMarried { get; set; }

    public string AddressAs { get; set; }
}

Comment puis-je exclure le champ AddressAs de la base de données?

23
Yogesh

Dans la version actuelle, le seul moyen d'exclure une propriété est de mapper explicitement toutes les autres colonnes:

builder.Entity<Employee>().MapSingleType(e => new {
  e.Id,
  e.Name,
  e.FatherName,
  e.IsMale,
  e.IsMarried
});

Comme AddressAs n'est pas référencé, il ne fait pas partie de l'entité/de la base de données.

L’équipe EF est compte tenu en ajoutant quelque chose comme ceci:

builder.Entity<Employee>().Exclude(e => e.AddressAs);

Je vous suggère de laisser un commentaire sur le blog EFDesign, demandant cette fonctionnalité :)

J'espère que cela t'aides

Alex

20
Alex James

pour référence future: vous pouvez utiliser des annotations de données MSDN EF - Annotations de données code premier

[NotMapped]        
public string AddressAs { get; set; }
55
markwilde

Je sais que c'est une vieille question, mais au cas où quelqu'un (comme moi) viendrait à la recherche ...

Il est maintenant possible de faire cela dans le cadre d'entité 4.3. Vous le feriez comme ça:

builder.Entity<Employee>().Ignore(e => e.AddressAs);
31
kmp

Il est également possible d'ajouter la colonne que vous voulez ignorer en tant que Shadow Property dans le DbContext:

builder.Entity<Employee>().Property<string>("AddressAs");

Ensuite, vous pouvez interroger sur cette colonne comme suit:

context.Employees.Where(e => EF.Property<string>(e, "AddressAs") == someValue);
0
Willem Ellis