2015-09-16 17 views
5

Ich arbeite mit . Ich habe eine Teilklasse namens Firma, die von EF generiert wird. Die partielle Klasse wie folgt aussieht:Hinzufügen von Attributen zu einem abgeleiteten Typ

Der Typ ‚BaseModels.Company‘ bereits eine Definition für ‚Company‘ enthält“

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

Was will ich eine abgeleitete Klasse von Unternehmen tun erstellen ist, dass hat eine zusätzliche Eigenschaft.

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

Aber ich will die Basistyp Eigenschaft Company mit einem benutzerdefinierten Attribute dekorieren.

Ich ging an die folgende Position: How do I add an attribute to the field of the base class from child class?

Welche meine Frage nicht beantworten. Das Problem ist, wenn ich die CompanyName-Eigenschaft in der Basisklasse als "virtuell" markiert habe, könnte EF den Code neu generieren, der meine Sachen überschreiben würde.

Ich habe versucht, eine partielle Klasse zu definieren, aber VS 2013 beschwerte sich, wenn ich hinzufügen versucht:

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

mit der Feststellung, dass der Eigenschaftsname bereits existiert.

Wie würde ich diese Hürde umgehen?

+0

'was VS2013 über beschwert ???' .. auch, wo Sie es überschrieben werden die Kinderklasse ..? – MethodMan

+0

Die Fehlermeldung, die von Visual Studio generiert wird, besagt, dass "der Typ 'BaseModels.Company' bereits eine Definition für 'CompanyName' enthält". Dies ist von einer Teilklasse, die ich im selben Projekt definiert habe. – coson

+0

ist diese EF Datenbank zuerst ..? Wenn ja, hier ist ein Link zu lesen Schritt-für-Schritt http://StackOverflow.com/Questions/19021991/entity-Framework-Database-first-how-to-alter-entities-to-make-them-derive-from -a – MethodMan

Antwort

1

Sie können mit partieller Klasse keine Eigenschaft definieren, die bereits existiert. Sie fügen Attribute über vorhandene Eigenschaften hinzu, die Sie für MetadataTypeAttribute benötigen. Erstellen Sie Teilklasse:

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

und Metadatenklasse zu einem Projekt mit Ihrer Immobilie mit dem gewünschten Attribute hinzufügen:

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

Machen Sie Company eine abstrakte Klasse. Verwenden Sie dann das Schlüsselwort override mit CompanyName, um das benutzerdefinierte Attribut hinzuzufügen. Sie können auch UploadName hinzufügen.

+0

Die Unternehmensklasse wird jedoch vom Entity Framework generiert. Ich bin mir nicht sicher, wie das das Problem lösen wird. – coson

Verwandte Themen