5

Mam dużą bazę danych istniejącą bazę danych, z którą mogę się komunikować, i używam najpierw bazy danych EF 5.0, problem, który mam, polega na tym, że jeśli utworzę jakiekolwiek dekoracje danych, takie jak [stringlength(50)] w klasie a następnie bazy danych są ładowane, kiedy "ładuję z bazy danych" wszystkie adnotacje danych zniknęły. Jak mogę je zachować?utrata danychAnotacja przy przesyłaniu modelu z bazy danych

+0

zaktualizowałem moją odpowiedź, aby pokazać, w jaki sposób ... – AminSaghi

Odpowiedz

8

To bardzo proste: Nie możesz! Ponieważ kody te są generowane automatycznie i zostaną nadpisane przy każdej aktualizacji lub zmianie każdego modelu.

Jednak możesz osiągnąć to, czego potrzebujesz, rozszerzając modele. Załóżmy, że EF generowane następujące klasy encji dla Ciebie:

namespace YourSolution 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class News 
    { 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public string Description { get; set; }   
     public int UserID { get; set; } 

     public virtual UserProfile User{ get; set; } 
    } 
} 

i chcesz zrobić kilka arounds pracy, aby zachować cię adnotacji danych i atrybuty. Tak, wykonaj następujące kroki:

pierwsze, dodać dwie klasy gdzieś (tam, gdzie chcesz, ale lepiej być w Models) jak następuje:

namespace YourSolution 
{ 
    [MetadataType(typeof(NewsAttribs))] 
    public partial class News 
    { 
     // leave it empty. 
    } 

    public class NewsAttribs 
    {    
     // Your attribs will come here. 
    } 
} 

następnie dodać jakie właściwości i atrybuty chcesz druga klasa - NewsAttribs tutaj. :

public class NewsAttrib 
{ 
    [Display(Name = "News title")] 
    [Required(ErrorMessage = "Please enter the news title.")] 
    public string Title { get; set; } 

    // and other properties you want... 
} 

Uwagi:

1) nazw generowanego klasy encji i twoi klas musi być taka sama - tutaj YourSolution.

2) Twoja pierwsza klasa musi być partial a jego nazwa musi być taka sama jak EF generowanej klasy.

przejść przez to i wasze attribs nigdy nie zostało utracone ponownie ...

+1

skończyło się robi somthing tak folowing samouczek http://msdn.microsoft. com/en-us/library/ee256141 (v = vs.100) .aspx – EricGS

+0

wspaniały przykład - Mój kluczowy błąd polegał na tym, że przestrzeń nazw nie była taka sama. Chciałbym prędzej znaleźć ten przykład! Chciałbym, aby tytuł tego wątku był łatwiejszy do znalezienia. Rozszerzanie klas częściowych i dodawanie wartości DataValidation do MVC. Świetna odpowiedź. Dziękuję Ci. – BriOnH