对象关系映射

时间:2010-10-13 12:31:00

标签: c# .net orm mapping

我需要将复杂数据类型的实例存储到关系数据库中。 有没有办法在没有首先修改数据库结构的情况下执行此操作,就像在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<Foo> FooList { get; set; }
}

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

class DBstructure: DbContext
{
    public DbSet<Foo> Foos { get; set; }
    public DbSet<Bar> Bars { get; set; }
}

任何想法?

3 个答案:

答案 0 :(得分:2)

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

你可以在ScottGu的帖子Code-First Development with Entity Framework 4

中阅读很多相关内容

答案 1 :(得分:0)

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

请参阅NHibernate,实体框架,以提及一些。

答案 2 :(得分:0)

我使用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<Foo>();
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>();

Bar barFromDB = new Bar();
barFromDB = dbconn.Bars.First<Bar>();

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

GrüßungJucker!