【Entity Framework】 Entity Framework资料汇总

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的codeFirst有两种方式:

第一种:.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);
        }
View Code
    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
    }
View Code

使用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

 

posted @ 2014-06-10 20:38  easy5  阅读(339)  评论(0编辑  收藏  举报