Entity framework 6.0 简明教程 ef6
http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx
Ef好的教程
Entity Framework的乐观并发
http://www.cnblogs.com/Gyoung/archive/2013/01/18/2866649.html
附件:EntityFramework系列:MySql的RowVersion
EF里一对一、一对多、多对多关系的配置和级联删除
EntityFramework系列:Repository模式与单元测试
1. Nuget安装好EF6.0.
2. 定义IDbContext , 定义context并实现
///
/// 提供对象列表的一切操作接口
///
public interface IDbContext : IDisposable
{
Database Database { get; }
///
/// Get DbSet
///
/// Entity type
/// DbSet
IDbSet Set() where TEntity : BaseEntity; ///
/// Save changes
///
///
int SaveChanges();
/// <summary>
/// 继承自DbContext, IDbContext,
/// 为什么IDbContext接口里面的属性和方法, 全部在DbContext里面有实现, 因此这里不需要做实现
/// </summary>
public class NopObjectContext : DbContext, IDbContext
{
public NopObjectContext()
: base("name=DefaultConnection")
{
//超时时常
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = ;
//这句代码指定我们是自己手动生成数据库
//Database.SetInitializer<XEngineContext>(null);
}
/// <summary>
/// 覆盖DbContext里面的Set属性, 主要是为了自定义的BaseEntity.
/// </summary>
/// <typeparam name="TEntity">Entity type</typeparam>
/// <returns>DbSet</returns>
public new IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
{
return base.Set<TEntity>();
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//来自Nopcommerce里的动态加载所有的fluent api映射 dynamically load all configuration
//System.Type configType = typeof(LanguageMap); //any of your configuration classes here
//var typesToRegister = Assembly.GetAssembly(configType).GetTypes()
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//去掉ef自建表的时候命名带复数
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
//全局删掉级联删除, 因为不常用.移除这个默认约定,再在需要开启级联删除的FluentAPI关系映射中用. WillCascadeOnDelete(true) 单独开启 var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
.Where(type => !String.IsNullOrEmpty(type.Namespace))
.Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.Configurations.Add(configurationInstance);
}; base.OnModelCreating(modelBuilder);
}
下面来一个多对多的配置


下面是映射的map


如果用的联合主键的话.
![]() |
![]() 这里的主键数量必须和表的主键数量相同 |
public class Student
{ public int ID { get; set; }
public string Name { get; set; } public int SiteID { get; set; } public virtual ICollection Courses{get;set;}
} public class Course{
public int ID{get;set;}
public string Name { get; set; } public int SiteID { get; set; } public virtual ICollection Students { get; set; }
}
public class SCContext : DbContext
{
public SCContext()
: base("name=DefaultConnection")
{
Database.SetInitializer(null);
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//dynamically load all configuration
//System.Type configType = typeof(LanguageMap); //any of your configuration classes here
//var typesToRegister = Assembly.GetAssembly(configType).GetTypes()
modelBuilder.Conventions.Remove(); modelBuilder.Entity().ToTable("Student").HasKey(x => new { x.ID, x.SiteID })
.Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); modelBuilder.Entity().ToTable("Course").HasKey(x => new { x.ID, x.SiteID })
.Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
//modelBuilder.Entity().Property(x => x.Name); modelBuilder.Entity().HasMany(x => x.Courses)
.WithMany(x => x.Students)
.Map(r =>
{
r.ToTable("Student_Course_Mapping");
r.MapLeftKey(new string[]{"StudentID", "StudentSiteID"});
r.MapRightKey(new string[] { "CourseID", "CourseSiteID" });
}); base.OnModelCreating(modelBuilder);
}
}
下面是一对一
![]() 同样在UserAccount里增加 ![]() |
![]() UserExt依赖于UserAccount |
最后是一对多
![]() 在UserAccount里增加 ![]() |
![]() 写在UserAddressMap里. 这个表里有外键, 依赖于UserAccount. ![]() |
最后来一发表结构

Entity framework 6.0 简明教程 ef6的更多相关文章
- 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性
[索引页][源码下载] 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性 作者:weba ...
- Entity Framework 6.0 Tutorials(1):Introduction
以下系统文章为EF6.0知识的介绍,本章是第一篇 原文地址:http://www.entityframeworktutorial.net/entityframework6/introduction.a ...
- 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...
- [EF2]Sneak Preview: Persistence Ignorance and POCO in Entity Framework 4.0
http://blogs.msdn.com/b/adonet/archive/2009/05/11/sneak-preview-persistence-ignorance-and-poco-in-en ...
- Entity Framework 5.0系列之Code First数据库迁移
我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...
- 在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
[原文地址]Using Repository and Unit of Work patterns with Entity Framework 4.0 [原文发表日期] 16 June 09 04:08 ...
- Entity Framework 5.0
今天 VS2012 .net Framework 4.5 Entity Framework 5.0 三者共同发布了. ( EF5 Released ) 在介绍新特性之前,先与大家回顾一下EF版 ...
- 云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
云优化的概念.Entity Framework 7.0.简单吞吐量压力测试 继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之 ...
- 浅析Entity Framework Core2.0的日志记录与动态查询条件
前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...
随机推荐
- 分形之树(Tree)
似乎每一个有关分形的教程都要讲到分形树,大概是因为树是生活中最常见的分形实物吧.这一节将展示下如何一步一步地生长出一棵树来.其实现算法不难,就是在每一次生长迭代中,使线段生长出几条新的线段来. 核心代 ...
- Linux-文件查找命令find
find - search for files in a directory hierarchy find命令用于在目录层级中查找文件 SYNOPSIS find [-H] [-L] [-P] [-D ...
- 多条件情况查询,sql select case when when else
多条件情况查询 SELECT Title, 'Price Range' = CASE WHEN price IS NULL THEN 'Unpriced' ...
- jacoco初探
# 背景 集团的代码覆盖率平台因为网络问题无法使用,只能自己研究下. 覆盖率是衡量自动化用例效果产品的一个指标,但只是一个辅助指标,覆盖率高并不意味着质量好,但覆盖率低却能说明一些问题, # 对比 覆 ...
- 数据导出之winfrom导出word(一)
我们常会用winfrom程序开发小工具,使用dataGridView控件展示数据.同时,我们也会有将这些数据导出的需求. 本篇文章介绍了开发过程中遇到的问题. 一.引用组件 首先,需要在窗体程序中引用 ...
- 【CF600E】 Lomsat gelral
CF600E Lomsat gelral Solution 考虑一下子树的问题,我们可以把一棵树的dfn序搞出来,那么子树就是序列上的一段连续的区间. 然后就可以莫队飞速求解了. 但是这题还有\(\T ...
- Python3.5 学习二十四
本节课程大纲: -------------------------------------------------------------------------------------------- ...
- sublime text syntaxdef
http://sublimetext.info/docs/en/extensibility/syntaxdefs.html
- Akka(20): Stream:异步运算,压力缓冲-Async, batching backpressure and buffering
akka-stream原则上是一种推式(push-model)的数据流.push-model和pull-model的区别在于它们解决问题倾向性:push模式面向高效的数据流下游(fast-downst ...
- fastjson 反序列化漏洞笔记,比较乱
现在思路还是有点乱,希望后面能重新写 先上pon.xml 包 <?xml version="1.0" encoding="UTF-8"?> < ...








