Sto usando EF6 per interrogare i dati da un database. Il database esisteva prima del codice e appartiene a un'altra applicazione, quindi non posso assolutamente modificare il database. Credo che sto usando un approccio al codice, anche se il database esiste già (perdonatemi dato che sono nuovo di EF). Il problema è che non sono in grado di recuperare i dati per una colonna che viene configurata come segue;
[Column("ITEM_QTY")]
public decimal ItemQuantity { get; set; }
Ora se rinominare la proprietà in ITEM_QTY, recupera i dati correttamente. Non sono sicuro di cosa mi stia perdendo. Posso estrarre correttamente i dati da qualsiasi altro campo, ma questo campo restituisce 0 indipendentemente da cosa sia presente nel DB. Qualcuno può fornire qualche direzione?
In un'altra discussione, qualcuno aveva suggerito un possibile problema con i caratteri di sottolineatura nel nome della colonna. Non sono sicuro se questo potrebbe essere, ma aggiungendo per informazioni. Grazie.
Modifica: aggiunta del codice utilizzato per interrogare il database. Si noti che questo è stato impostato prima di iniziare a lavorare sul progetto, quindi seguendo la stessa convenzione;
var t = this.Database.SqlQuery<InventoryDb>("select top 100 * from COMPANY_INVENTORY with (NOLOCK) where COMPANY = @CompanyName",
new SqlParameter("CompanyName", companyName)).ToList();
L'attributo Column
verrà ignorato se si utilizza SqlQuery<T>
personalizzato SqlQuery<T>
su DbContext
. È necessario passare l'istruzione Sql con l'alias per il nome della proprietà che corrisponde alla propria entità.
var t = this.Database.SqlQuery<InventoryDb>("select top 100 Item_QTY as [ItemQuantity], ... other columns ... from COMPANY_INVENTORY with (NOLOCK) where COMPANY = @CompanyName",
new SqlParameter("CompanyName", companyName)).ToList();
EDIT: lo DbSet.SqlQuery
controllando ulteriormente per curiosità e sembra che EF dovrebbe rispettare l'attributo Column
se invece hai usato DbSet.SqlQuery
. Non ho provato questo però. ( https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=vs.113).aspx )
var t = this.Inventory.SqlQuery("select top 100 * from COMPANY_INVENTORY with (NOLOCK) where COMPANY = @CompanyName",
new SqlParameter("CompanyName", companyName)).ToList();