2015-09-16 27 views
5

Sto lavorando con . Ho una classe parziale chiamata Company che viene generata da EF. La classe parziale assomiglia:Aggiunta di attributi a un tipo derivato

Il tipo 'BaseModels.Company' contiene già una definizione per 'CompanyName'"

public partial class Company { 
    public string CompanyId { get; set; } 
    public string CompanyName { get; set; } 
} 

Quello che voglio fare è creare una classe derivata da società che ha una proprietà in più.

public class MyCompany : Company { 
    public string UploadName { get; set; } 
} 

Ma voglio decorare la CompanyName proprietà type di base con un attributo personalizzato.

sono andato al seguente percorso: How do I add an attribute to the field of the base class from child class?

Il che non rispondere alla mia domanda. Il problema è se ho contrassegnato la proprietà CompanyName nella classe base come "virtuale", quindi EF potrebbe rigenerare il codice che sovrascriverà la mia roba.

ho cercato di definire una classe parziale, ma VS 2013 è lamentato quando ho provato ad aggiungere:

public partial class Company { 
    [Renderer("html")] 
    public virtual string CompanyName { get; set; } 
} 

affermando che il nome della proprietà già esisteva.

Come potrei aggirare questo ostacolo?

+0

'che cosa VS2013 lamenta ???' .. anche il luogo dove stai sovrascrivendolo nel la classe bambino ..? – MethodMan

+0

Il messaggio di errore che viene generato da Visual Studio dice che "Il tipo 'BaseModels.Company' contiene già una definizione per 'CompanyName'". Questo è da una classe parziale che ho cercato di definire nello stesso progetto. – coson

+0

è questo primo database EF ..? se è così ecco un link per leggere passo-passo http://stackoverflow.com/questions/19021991/entity-framework-database-first-how-to-alter-entities-to-make-them-derive-from -a – MethodMan

risposta

1

Non è possibile con una proprietà di definizione di classe parziale già esistente. Si aggiunge l'attributo sulla proprietà esistente che è necessario utilizzare MetadataTypeAttribute. Creare classe parziale:

[MetadataType(typeof(CompanyMetadata))] 
public partial class Company { } 

e aggiungere classe di metadati al progetto con la vostra proprietà con attributo desiderato:

public class CompanyMetadata 
{ 
    [Renderer("html")] 
    public string CompanyName { get; set; } 
} 
0

Fai compagnia una classe astratta. Quindi utilizzare la parola chiave override con CompanyName per aggiungere l'attributo personalizzato. Puoi anche aggiungere UploadName.

+0

Ma la classe Company è generata da Entity Framework. Non sono sicuro di come risolvere il problema. – coson

Problemi correlati