объектно-реляционное отображение - PullRequest
4 голосов
/ 13 октября 2010

Мне нужно сохранить экземпляр сложного типа данных в реляционной базе данных. Есть ли способ сделать это без предварительного моделирования структуры базы данных, как это делается в ado.net? Структура базы данных (или таблицы) должна быть создана из структуры класса. Класс имеет некоторые свойства, такие как int, strings или bools, но может иметь и более сложные свойства. Я благодарен за каждый совет помощи ...

Я хочу сделать это в c # ...

Обновление:

Спасибо за ваши ответы. Я попробовал «сначала код» в EF 4 (большое спасибо, Рамеш) и получил свои объекты в базу данных. Но теперь у меня проблема с получением данных из базы данных обратно в экземпляр объекта. Мои занятия выглядят так:

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

Итак, как я уже сказал, я могу создавать экземпляры этих классов и записывать их в БД. Но когда я пытаюсь создать новые экземпляры из данных базы данных, восстанавливаются только int и строка типа "Bar", но коллекция Foos пуста. Мой контекст БД выглядит так:

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


любая идея?

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

Да, это возможно, вы должны использовать Entity Framework 4 для этого.этот подход называется «Code First».

Вы можете прочитать об этом здесь в посте ScottGu Разработка кода с Entity Framework 4

0 голосов
/ 15 октября 2010

Я получил то, что хотел, используя 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, как это было сделано выше.Создайте свои объекты и установите для них данные в БД:

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üßung Jucker!

0 голосов
/ 13 октября 2010

Лучше всего использовать ORM инструмент, который может построить базу данных для вас из модели вашего домена (классы).

Посмотрите на NHibernate , Entity Frameworkупомянуть несколько.

...