2011-01-10 15 views
5

Sto scrivendo e l'applicazione ASP.NET MVC con SQL Server 2008. Sfortunatamente, l'unico modo per connettermi a quel database è attraverso un dsn o ODBC nel mio ambiente di produzione. In fase di sviluppo ho utilizzato un livello Linq2SQL per accedere ai dati nel database. Esiste un modo per forzare Linq2SQL a utilizzare ODBC per la connettività anziché una connessione client SQL?Posso usare LINQ2SQL con ODBC?

risposta

2

Il codice generato da LINQ su SQL presenta riferimenti hardcoded alle connessioni del server SQL ovunque, quindi no. Tuttavia, potresti essere in grado di utilizzare DBLinq.

1

Sì, c'è un modo per utilizzare ODBC con LINQ su SQL, ma è necessario un codice aggiuntivo e non sarà quasi altrettanto ricco di funzionalità. So che è possibile ottenere ORM per le dichiarazioni SELECT, ma non sono sicuro che funzioni per le istruzioni UPDATE o DELETE.

Nel seguente snippet di codice, ho prima definito il mio modello in un file .dbml Linq2Sql vuoto (ho creato manualmente un oggetto PurchaseOrder con i campi di cui ho bisogno). Ma poi nota come sono in grado di creare un nuovo contesto dati passando una connessione ODBC ad esso. Infine, c'è un ultimo trucco: devo usare il metodo ExecuteQuery del contesto di dati insieme a una dichiarazione SELECT per ottenere i miei ordini di acquisto.

using (var connection = new OdbcConnection("Driver={iSeries Access ODBC Driver};System=serverName;UID=yourUid;PWD=yourPwd")) 
{ 
    var purchaseOrderContext = new Models.PurchaseOrdersDataContext(connection); 

    var purchaseOrders = purchaseOrderContext.ExecuteQuery<Models.PurchaseOrder>("SELECT * FROM mySchema.myTable"); 
} 
5

Darin, mentre è possibile utilizzare la soluzione suggerita da Peder, sarebbe vanificato l'obiettivo di LINQ, come si sarebbe interrogazione del server direttamente invece di mappatura. Tom ha ragione riguardo al "codice hard" ma c'è un modo per aggirare, puoi creare la tua interfaccia, una grande spiegazione sui concetti e come farlo è qui: http://blogs.msdn.com/b/mattwar/archive/2008/11/18/linq-links.aspx