mapeo objeto-relacional

Necesito almacenar una instancia de un tipo de datos complejo en una base de datos relacional. ¿Hay alguna forma de hacer esto sin modificar primero la estructura de la base de datos, como se hace en ado.net? La estructura de la base de datos (o tabla) debe crearse a partir de la estructura de clase. La clase tiene algunas propiedades como ints, cadenas o bools, pero también podría tener otras más complejas. Estoy agradecido por cada consejo de ayuda …

Quiero hacer esto en c #

Actualizar:

Gracias por sus respuestas. Intenté el “código primero” de EF 4 (Muchas gracias Ramesh) y metí mis objetos en la base de datos. Pero ahora tengo un problema para que los datos de la base de datos vuelvan a la instancia de un objeto. Mis clases se ven así:

class Foo { public int id { get; set; } public string Woot { get; set; } } class Bar { public int id { get; set; } public string name { get; set; } public ICollection FooList { get; set; } } 

Entonces, como dije, puedo crear instancias de estas clases y escribirlas en la db. Pero cuando bash crear nuevas instancias a partir de los datos de la base de datos, solo se recupera el int y la cadena del tipo “Barra”, pero la Colección de Foos está vacía. Mi contexto db se ve así:

 class DBstructure: DbContext { public DbSet Foos { get; set; } public DbSet Bars { get; set; } } 

¿alguna idea?

Sí, eso es posible, tienes que usar Entity framework 4 para esto. El enfoque se llama “Código Primero”.

Puede leer mucho sobre esto aquí en el post Code-First Development de ScottGu con Entity Framework 4

Lo mejor es usar una herramienta ORM que pueda construir la base de datos desde su modelo de dominio (clases).

Mire NHibernate , Entity Framework, por mencionar algunos.

Obtuve lo que quería usando Entity Framework 4 con “código primero”. Para escribir objetos de las clases que publiqué anteriormente, en la base de datos solo tiene que crear los objetos regularmente:

 Foo foo = new Foo(); foo.Woot = "foo1"; Foo foo2 = new Foo(); foo2.Woot = "foo2"; Bar bar = new Bar(); bar.name = "bar1"; bar.Whee = new List(); bar.Whee.Add(foo); bar.Whee.Add(foo2); 

Luego cree el objeto DbContext , agregue los otros objetos a este contexto y llame al método saveChanges ():

 DBstructure dbconn = new DBstructure(); dbconn.Database.Connection.ConnectionString = connectionString //depends on your DB dbconn.Bars.Add(bar); dbconn.Database.Connection.Open(); dbconn.SaveChanges(); dbconn.Database.Connection.Close(); 

Eso crea la nueva base de datos con las tablas “Foos” y “Barras” y otra tabla de enlaces para administrar las relaciones entre las entidades.

Crear objetos a partir de la información de la base de datos también es bastante fácil. Simplemente conéctese a la base de datos a través de DbContext como se hizo anteriormente. Crea tus objetos y configúralos a los datos de la base de datos:

 DBstructure dbconn = new DBstructure(); dbconn.Database.Connection.ConnectionString = connString; dbconn.Foos.ToList(); //seems that you have to do that dbconn.Bars.ToList(); Bar barFromDB = new Bar(); barFromDB = dbconn.Bars.First(); 

Eso funciona bien en mi aplicación. Lo siento por la extraña clase y nombres de variables. Acabo de copiar el código de mi aplicación de prueba. Espero que ayude a alguien …

Grüßung Jucker!