对象关系映射

我需要将复杂数据类型的实例存储到关系数据库中。 有没有办法在没有首先修改数据库结构的情况下执行此操作,就像在ado.net中完成一样? 应该从类结构创建数据库(或表)结构。 该类有一些属性,如整数,字符串或bool,但也可能有更复杂的属性。 我很感激每一个帮助建议……

我想在c#中这样做…

更新:

谢谢你的回复。 我尝试了EF 4的“代码优先”(非常感谢Ramesh)并将我的对象放入数据库。 但是现在我遇到了将数据从数据库中取回到对象实例的问题。 我的课程看起来像这样:

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; } } 

所以,正如我所说,我可以创建这些类的实例并将它们写入数据库。 但是当我尝试从db数据创建新实例时,只恢复了int和“Bar”类型的字符串,但Foos的集合是emtpy。 我的db上下文如下所示:

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

任何的想法?

是的,这是可能的,你必须使用entity framework4。 这种方法被称为“代码优先”。

你可以在ScottGu发布的Code-First Development with Entity Framework 4中阅读很多相关内容

最好的方法是使用可以从域模型(类)为您构建数据库的ORM工具。

看看NHibernate ,Entity Framework中提到的一些。

我使用Entity Framework 4获得了我想要的“代码优先”。 要从我上面发布的类中编写对象,在数据库中只需要定期创建对象:

 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); 

然后创建DbContext对象,将其他对象添加到此上下文并调用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(); 

这将创建具有表“Foos”和“Bars”的新数据库以及另一个用于管理实体之间关系的链接表。

从数据库信息创建对象也很容易。 只需通过上面的DbContext连接到数据库。 创建对象并将其设置为db数据:

 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(); 

这在我的应用程序中工作正常。 对不起奇怪的类和变量名。 我刚从我的测试应用程序中复制了代码。 希望有人帮助……

GrüßungJucker!