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