Friday, August 5, 2011

How to use EntityFramework in asp net for beginner

Урьд өмнөх технологууд дандаа өгөгдлийн сан үүсгэсний дараа Entity Class Generate хийдэг байсан. Харин  EntityFramework нь (references дээ нэмснээр ашиглах боломжтой болно) Эхлээд Class аа өөрийн хүссэнээр үүсгээд програмаа ажиллуулахаар өгөгдлийн санг автоматаар үүсгэдэг арай өөр технологи юм.

 Жишээ

//MyDbContext нэртэй DatabaseObject үүсгэсэн гэе EntityFramework ашиглаж байна
// MyDbContext гэсэн нэртэй байгаа учраас Web.config -ийн connectionStrings үүдээс өөрийн нэрээр автоматаар сонгон өгөгдлийн сантай холбогдох болно.
// Жишээ нь <connectionStrings>    <add name="MyDbContext" connectionString="initial catalog=myDb

public MyDbContext : System.Data.Entity.DbContext
{
    //Миний table (олон мөр) гэсэн үг
    IList<Comment> Comments {get;set;}
}
//Ингээд Comments гэдэг table тэй myDb гэдэг өгөгдлийн сан автоматаар үүсэх болно.

//Миний table-ийн нэг мөр гэсэн үг
public class Comment
{
    [Key]
    public int CommentId { get; set; }
       
        //Хэрэв шинээр Title гэдэг талбар нэмсэн бол
        //Нэг ёсондоо Object оо сайжруулж кодоо өөрчлөн бичиж байна гэвэл
        //BlogDbContextInitializer class -г доорх маягаар ( жишээ загварчлал хийж болно энэ нь шинээр
        //нэмсэн талбарын утгыг оноод байна. 10 бичлэг хуучин байсан бол одоо нэг талбар нэмэгдээд түүний утга нь NULL болно байна)
        public string Title { get; set; }
       
    public string Comment { get; set; }
    //[ForeignKey]
    public int BlogId { get; set; }
    public virtual Blog Blog { get; set; }
}

class BlogDbContextInitializer : DropCreateDatabaseIfModelChanges<BlogDbContext>
{
    protected override void Seed(BlogDbContext context)
    {
        var Comments = context.Comments.ToList<Comments>();
        if (Comments.Count > 0)
        {
            foreach (Comments c in Comments)
            {
                c.Title = null;
            }
        }
        context.SaveChanges();
        base.Seed(context);
    }
}

//Тэгээд үүсгэсэн BlogDbContextInitializer class аа доорх кодоор вебтэй холбоно
Global.asax.cs дотор
protected void Application_Start()
{
    Database.SetInitializer<BlogDbContext>(new BlogDbContextInitializer());

    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}
код бичиж холбоно. Ингэснээр шинээр загварчилсан class ууд Update хийгдэнэ гэсэн үг


+ Анхаар

Хэрэв өгөгдлийн сан нэгэнт үүсчихсэн бөгөөд маш их өгөгдөл хадгалсан шинээр үүсгэвэл хайран санагдах тохиолдолд:
 Database.SetInitializer<BlogDbContext>(new BlogDbContextInitializer());
кодыг хэрхэвч ашиглаж болохгүй учир нь энэ код нь өгөгдлийн сангийн бүтцийг зассан эсвэл Entity Class уудаа өөрчилсөн тохиолдолд автоматаар өгөгдлийн сангийн бүтцийг солин доторхи өгөгдлийг үгүй болгодог. Тиймээс дээрх мөрийг авч хаяад Өгөгдлийн сангаа

exec sp_rename 'Blogs.ParentBlog_Id', 'Parent_Id', 'COLUMN'
--exec sp_RENAME 'table1.col', 'age', 'COLUMN'

гэх мэт код бичин өөрчилж бас Class уудаа мөн үүнд тохируулж зарим Property г солин хооронд нь гараар тохируулан ажиллуулвал Өгөгдлийн сангийн доторхи өгөгдөл устахгүй хэвээр үлдэх боломжтой. Нэг зүйл сануулахад ( автоматаар үүссэн өгөгдлийн сан доторх EdmMetaData гэсэн хүснэгт бий түүнийг устгах болно тэгээд гар аргаар цаашид тохируулж болно )

No comments: