2012-12-27 1 views
0

J'ai un modèle de domaine qui a des propriétés qui n'existent pas dans la base de données. Par exemple ...Entity Framework ne remplit que les champs de base de données dans le modèle de domaine

public class DomainModel: IKeyedEntity 
{ 
    //Id for the table 
    public int DomainModelID { get; set; } 

    //Foreign key value 
    public int FooID { get; set; } 

    //Text value 
    public string Value { get; set; } 

    //Generic reference to the id of the table 
    public int Key { get { return this.DomainModelID; } } 

    //No a column in the database 
    public Guid ArchiveIdentifier 
    { 
     get { return Foo.ArchiveIdentifier; } 
     set { Foo.ArchiveIdentifier = value } 
    } 

    //Navigation Property 
    public virtual Foo Foo { get; set; } 
} 

Comme vous pouvez voir les propriétés Key et ArchiveIdentifier ne sont pas des colonnes dans la table DomainModels. Lorsque j'exécute une requête, Entity Framework traite la propriété ArchiveIdentifier comme s'il s'agissait d'une colonne de la base de données. Voici un exemple de SQL généré lors de l'extraction de tous les DomainModels.

SELECT 
[Extent1].[DomainModelID] AS [DomainModelID], 
[Extent1].[FooID] AS [FooID], 
[Extent1].[Value] AS [Value], 
[Extent1].[ArchiveIdentifier] AS [ArchiveIdentifier] 
FROM [dbo].[DomainModels] AS [Extent1] 

Entity Framework ne cherche pas à remplir la propriété Key car elle ne dispose pas d'une méthode de jeu mais il traite ArchiveIdentifier comme si elle était une colonne dans la table. Existe-t-il une annotation ou une méthode pour indiquer à Entity Framework que ArchiveIdentifier n'est pas une colonne?

Répondre

4

Utilisez le NotMappedAttribute:

[NotMapped] 
public Guid ArchiveIdentifier 
{ 
    get { return Foo.ArchiveIdentifier; } 
    set { Foo.ArchiveIdentifier = value; } 
} 
0

Utilisez [NotMapped] annotation de données sur votre propriété ArchiveIdentifier

Questions connexes