2010-10-21 16 views
12

Soy nuevo en .NET y he escuchado acerca de varias formas diferentes de consultar un databse de SQL Server como ADO.NET y el marco de entidades.La mejor manera de acceder a una base de datos de SQL Server usando C# .Net

¿Alguien me puede dar algunos consejos sobre la mejor manera de obtener nuevas aplicaciones?

Gracias por cualquier ayuda o sugerencia.

+0

¿Cuánta experiencia en programación tiene? ¿Ha usado bases de datos antes? – Onkelborg

+0

Tengo algunos conocimientos básicos de C# y sé SQL, simplemente no he tenido que acceder a una base de datos en un programa C# antes. – user483267

+1

Esa es una pregunta abierta. Cualquier buena respuesta dependerá de lo que quieras hacer, del marco de tiempo con el que tengas que trabajar y de lo que ya estés familiarizado/cómodo. – jac

Respuesta

10

Aquí hay un ejemplo usando EF con la generación de código a partir de la base de datos (para una aplicación real, probablemente desee generar su BD a partir del código):

  1. Haga clic derecho en su proyecto >> Agregar >> Nuevo I tem >> ADO.NET Entity Data Model.
  2. escoger un nombre para sus entidades es decir MyEntities.edmx, haga clic en Siguiente
  3. Seleccione "generar a partir de la base de datos"
  4. Configurar una 'Nueva conexión' si no hay uno que ya existe. Siguiente.
  5. Seleccione las Tablas, Vistas y SPROC que desea incluir en las entidades. Terminar.

Usted verá un archivo MyEntities.edmx añade al proyecto. Puede abrirlo en la vista de diseño para ver un diagrama de sus entidades y relaciones. Tenga en cuenta que cada entidad debe tener una clave principal: la manera más fácil de hacerlo es agregar un ID - campo de incremento automático a cada tabla, o una columna GUID. De todos modos ahora se puede consultar su base de datos de esta manera:

// assuming a "Product" table, which has an entity pluralized to "Products" 

MyEntities db = new MyEntities(); 

var cheapProducts = db.Products.Where(p => p.Price > 30); // var is IEnumerable<Product> 
2

NHibernate es el camino a seguir. Consulte http://nhforge.org y http://sf.net/projects/nhibernate para obtener más información.

La diferencia principal entre Entity Framework y NHibernate es que Entity Framework es solo para Microsoft SQL Server (Oracle es un tipo de soporte, pero el soporte no es ideal). NHibernate es compatible con las bases de datos many many many.

+1

Considera también obtener NHibernate fluido si vas con esta opción. –

2

Entity Framework es la más fácil, y su construcción en.

Todo lo que tiene que hacer es importante su modelo, y luego simplemente actualizar clases simples, que se asignan automáticamente a su base de datos.

Es como actualizar objetos normales, pero al final llama a SaveChanges.

+1

Si está comenzando un proyecto que durará algunos años, no use EF. Contaminará sus objetos de dominio con información de estado. Te obligará a usar un estilo específico de codificación ... Las herramientas de VisualStudio para EF están medio respaldadas. Para proyectos largos, recomendaré usar NHibernate. –

+0

Tal BS, al salir de la caja se obtienen entidades con estado. Pero hay otras opciones muy simples. ¿Has mirado EF recientemente? Déjame ayudarte ... (http://channel9.msdn.com/Blogs/wriju/POCO-Template-in-ADONET-Entity-Framework) – Nix

2

LINQ to SQL es bastante fácil de usar. Puede arrastrar y soltar sus tablas de base de datos en el diseñador y escribir consultas bastante simples en unos minutos.

NorthwindDataContext db = new NorthwindDataContext(); 

    var products = from p in db.Products 
        select p; 

Lo que básicamente se traduciría en SELECT * FROM Productos

Algunas otras muestras selectas:

var products = from p in db.Products 
        where p.Category.Name == "Beverages" 
        select p; 

    var products = from p in db.Products 
        orderby p.Name 
        select p; 
+2

'var products = db.Products;' – SLaks

+1

Intentando mostrar la sintaxis de LINQ ... que es algo similar a SQL – Dismissile

+0

Para una solución ORM de propósito general en un proyecto nuevo, me gustaría ir con NHibernate sobre Linq-a-sql, pero probablemente sea más fácil trabajar con esta opción. – flatline

2

En mi opinión, la mejor solución es crear clase intermedia entre el PP y la aplicación (algún tipo de capa de datos), que una serie de métodos para gestionar las consultas. Descripción debajo de la base de SQLite como una analogía a SQL Server (conector ADO)

clase mencionada puede por Singleton, y se le puede llamar instancia donde quiera que desee en su aplicación - para SQLite que puede parece que:

private static SQLite instance; 

public static SQLite getInstance() 
{ 
    if(instance == null) 
    { 
    instance = new SQLite(); 
    thread = Thread.CurrentThread.ManagedThreadId; 
    } 
    return instance; 
} 

puede obtener la instancia de esta manera:

SQLite db = SQLite.getInstance(); 

esta clase puede contener múltiples métodos para la manipulación de datos, por ejemplo:

public SQLiteCommand prepareQuery(string sql) 
{ 
    cmd = new SQLiteCommand(sql, conn); 
    return cmd; 
} 

public SQLiteDataReader executeReader() 
{ 
    return cmd.ExecuteReader(); 
} 

public int executeInt() 
{ 
    object obj = cmd.ExecuteScalar(); 
    return (int)obj; 
} 

pero también métodos de administración de transacciones y diagnostoc. Así que ahora - puede usar esta clase en su aplicación si tiene otras fuentes de base de datos o incluso tipos de base de datos, puede crear la siguiente capa de datos (por ejemplo, para Oracle o MSSQL, MySQL ...) cada una de las cuales tiene implementos la misma interfaz, por ejemplo:

IDataBase 

y ahora, que tienen algún tipo de fachada, que puede reemplazar dinámicamente según sea necesario. A partir de este momento, el uso de db en la aplicación se concentra en un solo lugar, y es un placer para el programador usarlo, esa es mi sugerencia.

+1

Probablemente sea más fácil utilizar una abstracción de base de datos preexistente en lugar de girar la suya, a menos que el objetivo del OP sea puramente educativo. – Jimmy

+0

En esta situación es difícil obtener una capa uniforme compatible con todos los suscriptores – UGEEN

Cuestiones relacionadas