美文网首页
EF 6.0 入门系列 - 数据库连接

EF 6.0 入门系列 - 数据库连接

作者: 程序员长春 | 来源:发表于2017-02-23 18:15 被阅读0次

    前言

    Entity Framework (以下简称EF) 允许您创建一个模型(使用代码优先方法或建模工具),可以连接一个现有数据库或创建一个新的数据库。 一般来说,你将扩展DbContext,派生类将调用基类的一个基础构造函数来找出如何连接到数据库。 .Net框架现在倾向于使用“约定胜于配置”原则,这一点在DbContext如何发现数据库是非常明显的。 本篇我们将介绍一些Code First 模式下,连接数据库的不同方法。

    约定连接

    先看一个最简单的DBContext

    namespace EFDemoWeb
    {
      public class DemoContext : DbContext
      {
        public DbSet<Contact> Contact { get; set; }
      }
    
     public class Contact
        {
            public int ID { get;set; }
            public string Name { get; set; }
            public DateTime birthday { get; set; }
            public string Phone { get; set; }
        }
    }
    

    使用上面这段代码,没有在应用程序中进行其他设置,那么当应用程序新建DBContext实例的时候,无参构造函数的DBContext,EF默认运行在Code First模式下,连接字符串按照约定进行构造。在这个例子中,使用包含命名空间的类名,即“EFDemoWeb.DemoContext”作为数据库名称。
    一个空WEB项目中,最基本的Web.config文件内容

    <?xml version="1.0" encoding="utf-8"?>
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.6.1" />
        <httpRuntime targetFramework="4.6.1" />
      </system.web>
    </configuration>
    

    Nuget引用Entity Framework之后的Web.config文件内容

    ......
    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
    ......
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="mssqllocaldb" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
    </configuration>
    

    EF默认使用Microsoft SQL Server LocalDB作为数据库引擎,可以看到,在config文件中并没有连接字符串出现,数据库文件放在哪儿呢?
    根据项目类型不同,VS自动产生的连接字符串会有所不同。

    • 控制台项目/Winform/WPF等客户端项目

    Data Source=(localdb)\v11.0;AttachDbFilename=EFDemoWeb.DemoContext.mdf;Initial Catalog=EFDemoWeb.DemoContext;Integrated Security=True;MultipleActiveResultSets=True

    • Web项目

    Data Source=(localdb)\v11.0;AttachDbFilename=|DataDirectory|EFDemoWeb.DemoContext.mdf;Initial Catalog=EFDemoWeb.DemoContext;Integrated Security=True;MultipleActiveResultSets=True

    1. 对于没有“|DataDirectory|”的连接字符串,数据库文件将会保存在“C:\Users\UserName”文件夹下。
    2. 在Web项目中,默认会创建一个App_Data文件夹,|DataDirectory|默认指向此文件夹。
    3. 可以使用代码修改|DataDirectory|的文件夹路径。
    AppDomain.CurrentDomain.SetData(“DataDirectory”, newpath)
    

    配置连接

    在App.config或者Web.config文件中配置连接字符串,就不细说了,因为几乎90%的Web项目Demo里面都有类似这样的配置项

    <connectionStrings>
      <add 
        name="NorthwindConnectionString" 
        connectionString="Data Source=serverName;Initial 
        Catalog=Northwind;Persist Security Info=True;User 
        ID=userName;Password=password"
        providerName="System.Data.SqlClient"
      />
    </connectionStrings>
    

    参考资料

    1. 数据库连接字符串大全
    2. Working with local databases

    相关文章

      网友评论

          本文标题:EF 6.0 入门系列 - 数据库连接

          本文链接:https://www.haomeiwen.com/subject/bhyswttx.html