2015-09-16 12 views
5

Pracuję z . Mam częściową klasę o nazwie Company, która jest generowana przez EF. Częściowa klasy wygląda następująco:Dodawanie atrybutów do typu pochodnego

typu „BaseModels.Company” zawiera już definicję „NazwaFirmy””

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

Co chcę zrobić, to utworzyć klasę pochodzącą od Spółki, ma dodatkową właściwość.

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

Ale chcę urządzić typ bazowy NazwaFirmy działce z atrybutu niestandardowego.

poszedłem do następującej lokalizacji: How do I add an attribute to the field of the base class from child class?

Która jest odpowiedź na moje pytanie. Problem polega na tym, że jeśli oznaczyłem właściwość CompanyName w klasie podstawowej jako "wirtualną", EF może zregenerować kod, który zastąpi moje rzeczy.

próbowałem zdefiniować częściowej klasy, ale VS 2013 skarżył się, gdy próbowałem dodać:

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

stwierdzając, że nazwa właściwości już istnieje.

Jak obejść tę przeszkodę?

+0

'co ma VS2013 narzekać ???' .. także gdzie jesteś przesłanianie go w klasa dziecka ..? – MethodMan

+0

Komunikat o błędzie generowany przez program Visual Studio mówi, że "Typ" BaseModels.Company "zawiera już definicję" NazwaFirmy ". To jest z częściowej klasy, którą próbowałem zdefiniować w tym samym projekcie. – coson

+0

to ta baza danych EF najpierw ..? jeśli tak, tutaj jest link do przeczytania krok po kroku http://stackoverflow.com/questions/19021991/entity-framework-database-first-how-to-alter-entities-to-make-them-derive- from -a – MethodMan

Odpowiedz

1

Nie można za pomocą częściowej klasy zdefiniować właściwości, która już istnieje. Dodajesz atrybut do istniejącej właściwości, musisz użyć MetadataTypeAttribute. Tworzenie częściowej klasy:

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

i dodać klasę metadanych do projektu z nieruchomości z pożądanym atrybutem:

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

Uczyń firmę klasą abstrakcyjną. Następnie użyj słowa kluczowego override z CompanyName, aby dodać atrybut niestandardowy. Możesz także dodać parametr UploadName.

+0

Ale klasa firmy jest generowana przez Entity Framework. Nie jestem pewien, jak to rozwiąże problem. – coson

Powiązane problemy