5

Załóżmy, że mam bazę danych z 1 tabelą o nazwie Products. Tak więc przechodzę przez podejście Db First i tworzę model EF w VS 2012 z opcją pluralize and singularize.Jak zdefiniować niestandardową konwencję nazewnictwa, jeśli EF 5

Tak więc model tworzy dla mnie obiekt Product, a domyślna konwencja nazewnictwa odwzorowuje ten obiekt na tabelę dbo.Products.

Teraz chcę zmienić to zachowanie. W rzeczywistości chcę utworzyć niestandardową konwencję do mapowania jednostki ProductModel do tabeli dbo.Products.

Czy to możliwe ?! Jeśli tak to jak?

Aktualizacja: Mój cel to zrobić ...

Jak wiesz, kiedy tylko zaktualizować swój model z bazą danych, jeżeli powoduje zmianę modelu podmioty generowane automatycznie będzie ponad napisany .

Z drugiej strony chcę dodać adnotacja dane przypisuje właściwości jednostki, aby można było wykorzystać je kształtować swoje poglądy i chcą po prostu pracować z moich DbContext jak na poniższym wkładki:

public ActionResult Create(Product product) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Products.Add(product); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(product); 
    } 

się Problem polega na tym, że moja analiza aplikacji nie została zakończona, a baza danych zmienia się w czasie. Potrzebuję więc zaktualizować model z bazy danych, a potem wszystkie moje atrybuty zostaną usunięte.

Postanowiłem więc utworzyć klasę ProductModel i skopiować do niej kody Product, a następnie przekazać widoki jako model widoku. Następnie whene Chcę zapytać mojego db, będę się wyjątek, który mówi, że nazwa dbo.ProductModels nie istnieje w db ...

z góry dzięki

+0

Nie ...! Mogę, ale nie chcę ulepszać .edmx i jego bytów – AminSaghi

+1

Więc teraz jestem całkowicie zagubiony co do (a) tego, co chcesz zrobić, i (b) jakie jest twoje pytanie. jedyne * konwencje *, które znam, to niestandardowe konwencje, które EF ** 6 ** przyniosą na pierwszy rozwój kodu. Nic więcej nie istnieje, obawiam się, –

+0

Drodzy przyjaciele! Zaktualizowałem moje Q i dodałem kilka wyjaśnień ... – AminSaghi

Odpowiedz

3

Domyślnie podejście bazy pierwszy zawsze zamapuje nazwę tabeli na encję o tej samej nazwie (prawdopodobnie pluralizowaną/pojedynczą). Obecnie w EF nie ma przepisu, który by to udoskonalał poprzez konwencje lub oprzyrządowanie. Możesz zmienić/dostosować/dostosować swój model - ale jeśli go zregenerujesz, te zmiany zostaną utracone. Nie znam żadnych narzędzi/skryptów/hacków, aby jakoś "zachować" te zmiany i ponownie zastosować je po zregenerowaniu modelu z bazy danych.

Jeśli chcesz przedłużyć wygenerowany Sugeruję wykorzystując fakt, że są częściowe klasy - można przedłużyć wygenerowanej klasy w drugim pliku fizycznego:

napisać to w oddzielnym pliku np ProductExtension.cs:

public partial class Product 
{ 
    // add your custom methods etc. here 
} 

Te różne pliki, które tworzą tej klasy zostaną połączone razem w jednej klasieprzez kompilator C# dla Ciebie.

Jeśli trzeba dodawać adnotacje do istniejących danych wygenerowanych klas, można użyć MetadataType (..) przypisują as shown in this SO question and its answers:

napisać to w oddzielnym pliku, na przykładProductExtension.cs:

[MetadataType(typeof(ProductMetaData))] 
public partial class Product 
{ 
} 

a następnie określenie metadanych adnotacje/dane dla swojej klasie produktów w jeszcze innym pliku, ProductMetadata.cs, tak:

public class ProductMetaData 
{ 
    [Required] 
    public int RequestId {get;set;} 
    //... 
}