EF框架step by step(9)—Code First Fluent API
在上一篇中,讲述了用数据特性的方式来标识实体与数据表之间的映射关系,在Code First方法中,还可以通过Fluent API的方式来处理实体与数据表之间的映射关系。
要使用Fluent API必须在构造自定义的DbContext时,重写OnModelCreating方法,在此方法体内调用Fluent API。
如下面代码所示:
{
public BlogDbContext()
: base("name=BlogDB2005")
{
}
protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder)
{
//do something
base.OnModelCreating(modelBuilder);
}
}
下面来看一些简单的例子
主键
联合主键
modelBuilder.Entity<BlogUser>().HasKey(user =>new { user.UserId, user.BlogName });
字段非空
modelBuilder.Entity<BlogUser>().Property(user => user.BlogName).IsRequired();
设定字段最大长度
设置复杂属性,相当数据特性中的ComplexType
属性字段不映射到数据表字段,相当于数据特性中的NotMapped
设置字段是否自动增长
modelBuilder.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);
设定实体映射到数据库中的表名
设置实体属性映射到数据库中的列名
.Property(user => user.Description)
.HasColumnName("userDescription")
.HasColumnType("ntext");
完整代码
class FluentAPISample
{
staticvoid Main(string[] args)
{
using (var db =new BlogDbContext())
{
db.Database.Create();
}
}
}
publicclass BlogDbContext : DbContext
{
public BlogDbContext()
: base("name=BlogDB2005")
{
Database.SetInitializer<BlogDbContext>(
new DropCreateDatabaseIfModelChanges<BlogDbContext>()
);
}
protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<BlogUser>().HasKey(user => user.UserId);
//联合主键
//modelBuilder.Entity<BlogUser>().HasKey(user => new { user.UserId, user.BlogName });
//设置自动增长,如不需要自动增长,则设为 DatabaseGeneratedOption.None
modelBuilder.Entity<BlogUser>().Property(user => user.UserId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
//要求属性必填
modelBuilder.Entity<BlogUser>().Property(user => user.BlogName).IsRequired();
modelBuilder.Entity<BlogUser>().Property(user => user.BlogName).HasMaxLength(20);
modelBuilder.Entity<BlogUser>().Ignore(user => user.MyProperty);
modelBuilder.ComplexType<Address>();
///产生一对多的关系
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");
base.OnModelCreating(modelBuilder);
}
}
publicpartialclass BlogUser
{
publicint UserId { get; set; }
publicstring BlogName { get; set; }
publicint MyProperty { get; set; }
public Address Address { get; set; }
publicstring Description { get; set; }
publicvirtual ICollection<Post> Posts { get; set; }
}
publicpartialclass Post
{
publicint PostId { get; set; }
publicstring PostTitle { get; set; }
publicint UserId { get; set; }
public BlogUser BlogUser { get; set; }
}
publicpartialclass Address
{
publicstring Province { get; set; }
publicstring City { get; set; }
}
转载于:https://www.cnblogs.com/weihengblogs/p/5127609.html
EF框架step by step(9)—Code First Fluent API相关推荐
- EF框架step by step(1)—Database-First
ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,现已经包含在 Visual Studio 2008 S ...
- Caffe使用step by step:caffe框架下的基本操作和分析
Caffe使用step by step:caffe框架下的基本操作和分析 时间:2015-10-16 11:40:09 阅读:808 评论:0 收藏:0 [点我 ...
- WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)
WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code) 原文:WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GL ...
- EF框架之Code First
EF框架之Code First 优点 Code First不会生成.edmx文件,不用考虑数据库加表字段等更新edmx文件带来的弊端. 如果数据库发生了更改,该怎么办? "Code Firs ...
- Asp.Net Core 5 REST API - Step by Step(一)
翻译自 Mohamad Lawand 2021年1月19日的文章 <Asp.Net Core 5 Rest API Step by Step> [1] 在本文中,我们将创建一个简单的 As ...
- NHibernate Step by Step:序篇 (转)
原文出处:http://www.cnblogs.com/abluedog/archive/2006/04/15/375676.html 原文作者:abluedog 很久以前,你可能习惯了connect ...
- GoFrame Step by Step Demo - P1
GoFrame Step by Step Demo P1 框架说明文档 GFTool 安装 Web框架学习 文章目录 GoFrame Step by Step Demo P1 参考Demo 记录 安装 ...
- 吴恩达Coursera深度学习课程 DeepLearning.ai 编程作业——Convolution model:step by step and application (4.1)
一.Convolutional Neural Networks: Step by Step Welcome to Course 4's first assignment! In this assign ...
- GAN Step By Step -- Step4 CGAN
GAN Step By Step 心血来潮 GSBS,顾名思义,我希望我自己能够一步一步的学习GAN.GAN 又名 生成对抗网络,是最近几年很热门的一种无监督算法,他能生成出非常逼真的照片,图像甚至视 ...
- 【Step By Step】将Dotnet Core部署到Docker下
一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...
最新文章
- MySQL中对varchar类型排序问题的解决
- 提问赠书 | 我们请了 7 位云原生专家,等你来问
- wordpress 怎么获取站点标题
- LLVM编译器基础 架构
- 跳槽到新公司,我直接让项目的性能提升了一半。。。
- 施密特:下个千亿美元市值公司将出在哪个行业
- Python快速实现视频播放器
- PPT转HTML手机软件,《PPT转换成Html》PPT转Htm、Html软件和方法大全
- c++课程设计图书馆管理系统总结
- 微信智能机器人助手,基于hook技术,自动聊天机器人
- 图片不变形,按照等比例缩小或扩大显示
- LTE-UMTS长期演进与实践学习(1)——LTE基本架构
- 元界快讯|中手游去年营收微增净利下滑,“仙剑”元宇宙今夏开测
- RTX2050怎么样 rtx2050显卡什么水平
- 我的linux学习笔记
- 在一台电脑上如何安装两个JDK,并实现自由切换
- Type-C接口手机你还只知道可正反随意插?这些神操作赶紧来看看
- (离散数学)排列与组合
- PHY6252国产低功耗蓝牙5.2 SoC芯片智能手环/智能家居方案替代NRF52810
- 在C++中实现foreach循环,比for_each更简洁!