EF框架step by step(9)—Code First Fluent API.pdf
上传人:sy****28 上传时间:2024-09-15 格式:PDF 页数:3 大小:157KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

EF框架step by step(9)—Code First Fluent API.pdf

EF框架stepbystep(9)—CodeFirstFluentAPI.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

EF框架stepbystep(9)—CodeFirstFluentAPI2011-05-2808:34by杨延成,3146阅读,12评论,收藏,编辑在上一篇中,讲述了用数据特性的方式来标识实体与数据表之间的映射关系,在CodeFirst方法中,还可以通过FluentAPI的方式来处理实体与数据表之间的映射关系。要使用FluentAPI必须在构造自定义的DbContext时,重写OnModelCreating方法,在此方法体内调用FluentAPI。如下面代码所示:publicclassBlogDbContext:DbContext{publicBlogDbContext():base("name=BlogDB2005"){}protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){//dosomethingbase.OnModelCreating(modelBuilder);}}下面来看一些简单的例子主键modelBuilder.Entity<BlogUser>().HasKey(user=>user.UserId);联合主键//联合主键modelBuilder.Entity<BlogUser>().HasKey(user=>new{user.UserId,user.BlogName});字段非空//要求属性必填modelBuilder.Entity<BlogUser>().Property(user=>user.BlogName).IsRequired();设定字段最大长度modelBuilder.Entity<BlogUser>().Property(user=>user.BlogName).HasMaxLength(20);设置复杂属性,相当数据特性中的ComplexTypemodelBuilder.ComplexType<Address>();属性字段不映射到数据表字段,相当于数据特性中的NotMappedmodelBuilder.Entity<BlogUser>().Ignore(user=>user.MyProperty);设置字段是否自动增长//设置自动增长,如不需要自动增长,则设为DatabaseGeneratedOption.NonemodelBuilder.Entity<BlogUser>().Property(user=>user.UserId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);设置外键///产生一对多的关系modelBuilder.Entity<Post>().HasRequired(p=>p.BlogUser).WithMany(user=>user.Posts).HasForeignKey(p=>p.UserId);///与上面等效//modelBuilder.Entity<BlogUser>()//.HasMany(user=>user.Posts)//.WithRequired(p=>p.BlogUser)//.HasForeignKey(p=>p.UserId);设定实体映射到数据库中的表名modelBuilder.Entity<BlogUser>().ToTable("MyUser");设置实体属性映射到数据库中的列名modelBuilder.Entity<BlogUser>().Property(user=>user.Description).HasColumnName("userDescription").HasColumnType("ntext");下面给出完整代码,方便测试:完整代码classFluentAPISample{staticvoidMain(string[]args){using(vardb=newBlogDbContext()){db.Database.Create();}}}publicclassBlogDbContext:DbContext{publicBlogDbContext():base("name=BlogDB2005"){Database.SetInitializer<BlogDbContext>(newDropCreateDatabaseIfModelChanges<BlogDbContext>());}protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){