Fluent API :
http://social.msdn.microsoft.com/Search/zh-CN?query=Fluent%20API&Refinement=95&ac=4
http://msdn.microsoft.com/zh-cn/data/hh134698.aspx
http://msdn.microsoft.com/zh-cn/data/jj591617.aspx
http://msdn.microsoft.com/zh-cn/data/jj591620.aspx
CodeFirst:
http://www.codeproject.com/Articles/504720/EntityplusFrameworkplusCodeplusFirstplusMigrations
Understanding Database Initializers in Entity Framework Code First:
http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm
http://www.codeguru.com/csharp/article.php/c19233/Introduction-to-Entity-Framework-Code-First.htm
第一种:.EF自动创建数据库。
第二种:EF使用已经存在的数据库,EF的codeFirst使用已经存在的数据库,需要在配置文件中添加:
<configuration>
<connectionStrings>
<add
name="MyDB"
providerName="System.Data.SqlClient"
connectionString="Server=.SQLEXPRESS;Database=TestDb;Trusted_Connection=true;"/>
</connectionStrings>
</configuration>
public partial class BlogContext : DbContext
{
public BlogContext():base("MyDB")
{
}
。。。。
}
codeFirst的实现机制是先去配置文件中找,是否连接字符串,有则用已经存在的数据库,无则自动创建数据库
【1】如果BlogContext():base(“”)构造函数没有传参,先去配置文件中找是否连接字符串与"命名空间.BlogContext"同名的连接字符串。如果有,用这个数据库连接,若无,创建新的名为--”命名空间.BlogContext“的数据库
【2】如果BlogContext():base(“MyDB”)构造函数传参“MyDB”,先去配置文件中找是否连接字符串与"MyDB"同名的连接字符串。如果有,用这个数据库连接,若无,创建新的名为--”MyDB“的数据库
若需要在修改一些配置:
(什么时候要添加额外的配置?
答:比如:
1.CodeFirst自动生成的表名、表字段名不满足你的命名习惯
2.用已经存在的数据库表名称,表的列名等和实体类的字段名不一样,EF就无法建立表和实体类字段的映射关系,这时需要添加配置
添加配置的方法有两种:
第一种是使用特性:例如:[key]。但是使用特性这种方法有时无法满足所有的需求,
这时就要用第二种方法FluentAPI,
还有就是想我这种有代码点洁癖的,不喜欢在POCO类添加这些特性,若以后换了ORM框架,
EF的这些特性,跟其他ORM特性就没关系了,不删代码(实体类上的EF特性),要编译通过就得引用EF程序集。而EF程序集又不是现在需要的。所以
尽量保持POCO类的洁净是件好事
第二种是使用FluentAPI
)
重写BlogContext()的方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
例如:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder .Configurations .Add(new UserTypeConfiguration()) .Add(new ProductTypeConfiguration()) .Add(new CategoryTypeConfiguration()) .Add(new CategorizationTypeConfiguration()) .Add(new SalesLineTypeConfiguration()) .Add(new SalesOrderTypeConfiguration()) .Add(new ShoppingCartItemTypeConfiguration()) .Add(new ShoppingCartTypeConfiguration()) .Add(new RoleTypeConfiguration()) .Add(new UserRoleTypeConfiguration()); base.OnModelCreating(modelBuilder); }
public class UserTypeConfiguration : EntityTypeConfiguration<User> { #region Ctor /// <summary> /// Initializes a new instance of <c>CustomerTypeConfiguration</c> class. /// </summary> public UserTypeConfiguration() { HasKey(c => c.ID); Property(c => c.ID) .IsRequired() .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); Property(c => c.UserName) .IsRequired() .HasMaxLength(20); Property(c => c.Password) .IsRequired() .HasMaxLength(20); Property(c => c.Email) .IsRequired() .HasMaxLength(80); ToTable("Users"); } #endregion }
使用Fluent API进行了额外的配置。
【工欲善其事必先利其器】—Entity Framework实例详解:
http://www.cnblogs.com/nianming/archive/2012/11/04/2753183.html
DDD & EntiyFramework
Shrink EF Models with DDD Bounded Contexts:
http://www.nmtree.net/2014/05/09/shrink-ef-models-with-ddd-bounded-contexts.html