5

Supponiamo di disporre di un database con 1 tabella denominata Products. Quindi, passo attraverso l'approccio Db First e creo un modello EF in VS 2012 con l'opzione pluralize and singularize.Come definire una convenzione di denominazione personalizzata se EF 5

Quindi, il modello crea per me un'entità Product e la convenzione di denominazione predefinita associa questa entità alla tabella dbo.Products.

Ora voglio cambiare questo comportamento. In effetti, desidero creare una convenzione personalizzata per mappare l'entità ProductModel sulla tabella dbo.Products.

È possibile ?! Se é cosi, come?

Aggiornamento: Il mio obiettivo per farlo ...

Come sapete, ogni volta che si aggiorna il modello dal database, se si provoca un cambiamento nel modello, le entità generate automaticamente saranno sovrascritti .

Da altra parte, voglio aggiungere annotazioni dei dati attribuisce alla proprietà di entità in modo che io possa usare per modellare le mie opinioni e vogliono lavorare soltanto con i miei DbContext come il seguente inserimento:

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

     return View(product); 
    } 

la il problema è che la mia analisi dell'applicazione non è completata e il database cambia di volta in volta. Quindi, ho bisogno di aggiornare il modello dal database e, successivamente, tutti i miei attributi verranno rimossi.

Quindi ho deciso di creare una classe ProductModel e di copiare i codici Product e passare le visualizzazioni come modello di vista. Poi, whene voglio interrogare il mio db, vado a prendere un'eccezione che dice che il nome dbo.ProductModels non è esiste nel DB ...

Grazie in anticipo

+0

No ...! Posso, ma non voglio modificare il .edmx e le sue entità – AminSaghi

+1

Quindi ora sono completamente perso da (a) cosa vuoi fare e (b) che cosa è veramente la tua domanda .... le uniche * convenzioni * che conosco sono le convenzioni personalizzate che EF ** 6 ** porterà allo sviluppo in codice. Niente altro esiste, ho paura –

+0

Cari amici! Ho aggiornato la mia Q e ho aggiunto alcune spiegazioni ... – AminSaghi

risposta

3

Per impostazione predefinita, un approccio database prima mapperà sempre un nome di tabella ad un'entità con lo stesso nome (eventualmente pluralizzata/singolarizzata). Non vi è attualmente alcuna disposizione in EF da modificare per convenzioni o strumenti. È possibile modificare/adattare/personalizzare il modello, ma se lo si rigenera, tali modifiche vengono perse. Non sono a conoscenza di strumenti/script/hack per "preservare" in qualche modo tali modifiche e riapplicarle dopo aver rigenerato il modello dal database.

Se è necessario estendere il generato Io suggerirei sfruttando il fatto che questi sono parziali classi - si può estendere classe generata in un secondo file fisico:

Scrivere questo in un file separato , per esempio ProductExtension.cs:

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

Questi diversi file che compongono quella classe saranno fusi insieme in una classe dal compilatore C# per voi.

Se avete bisogno di aggiungere annotazioni di dati per classi generate esistenti, è possibile utilizzare il MetadataType (..) attribuiscono as shown in this SO question and its answers:

Scrivere questo in un file separato, per esempioProductExtension.cs:

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

e quindi definire le annotazioni metadati/dati per la classe di prodotti in ancora un altro file, ProductMetadata.cs, in questo modo:

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