Перейти к содержимому

Используем EF 4 в WebMatrix

08.11.2010

Несмотря на то, что Entity Framework является достаточно серьёзной ORM-библиотекой, не предназначеной для «начинающих» разработчиков, мы довольно просто можем использовать её в WebMatrix.

Первым делом необходимо добавить библиотеку Microsoft.Data.Entity.CTP.dll в ~/bin нашего сайта. Разумеется, нам также потребуется база данных, для хранения наших обьектов -создайте её, если в Вашем проекте нет ни одной базы.

Теперь нам потребуется модель для нашей ORM: создадим файл в каталоге App_Data с именем
GuestbookEntry.cs:

using System;
using System.ComponentModel.DataAnnotations;
public class GuestbookEntry
{

[ScaffoldColumn(false)]
public int Id { get; set; }
[Required]
[StringLength(30)]
public string Name { get; set; }
[Required]
[StringLength(60)]
public string Email { get; set; }
[Required]
[StringLength(1000)]
public string Message { get; set; }
[Timestamp]
public DateTime Posted { get; set; }

}

Затем нам понадобится Data Context. Создадим файл DataContext.cs:

using System.Data.Entity;
public class DataContext : DbContext
{
public DbSet Guestbook { get; set; }
}

Чтобы было проще работать с данными, создадим «репозиторий» — GuestbookRepository.cs:

using System;
using System.Collections.Generic;
using System.Linq;public class GuestbookRepository
{

private DataContext _ctx = new DataContext();
public GuestbookEntry First(Func where)
{

return _ctx.Guestbook.First(where);

}
public List GetAll()
{

return _ctx.Guestbook.ToList();

}
public void Add(GuestbookEntry entity)
{

entity.Posted = DateTime.Now;
_ctx.Guestbook.Add(entity);
_ctx.SaveChanges();

}
public void Delete(GuestbookEntry entity)
{

_ctx.Guestbook.Remove(entity);
_ctx.SaveChanges();

}

}

 

Последний шаг, который отделяет нас от готовой к использованию системы — нам необходимо удостовериться, что структура базы данных будет создаваться заново каждый раз, когда мы вносим изменения в структуру объектов. Для этого добавьте в файл _start.html следующие строки:

@using db = System.Data.Entity.Infrastructure;
@{
db.Database.SetInitializer(new db.RecreateDatabaseIfModelChanges());
}

Напомню, что код, записаный в этом файле будет выполняться каждый раз, когда сайт будет запущен на сервере.

Вот и всё! Для проверки, создайте файл guestbook.cshtml:

@{
var gb = new GuestbookRepository();if (IsPost)
{
var entry = new GuestbookEntry()
{
Name = "Mikael",
Email = "my@email.com",
Message = "New message!"
};gb.Add(entry);
}var grid = new WebGrid(gb.GetAll());
}@grid.GetHtml()

 

Добавить комментарий

Оставьте комментарий