EFCodeFirst 数据库连接
EFCodeFirst
数据库连接
1.NuGet安装实体命令
- PM> Install-Package EntityFramework
2.数据库连接字符串
自动添加得app.Config大体如下:
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <configSections>
- <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
- </configSections>
- <entityFramework>
- <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
- <parameters>
- <parameter value="Data Source=(local); Database=Portal; User ID=sa; Password=; MultipleActiveResultSets=True" />
- </parameters>
- </defaultConnectionFactory>
- </entityFramework>
- </configuration>
设置DefaultConnectionFactory之后,使用Entity Framework连接数据库不需再在其他地方进行设置,Entity Framework也不需要指定数据库连接。
通过配置connectionStrings
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <connectionStrings>
- <add name="PortalContext" connectionString="Data Source=(local); Database=Portal; User ID=sa; Password=; MultipleActiveResultSets=True"
- providerName="System.Data.SqlClient" />
- </connectionStrings>
- </configuration>
3.DbContext连接数据库
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- using System.Data.Entity;
-
- namespace Portal
- {
- public class PortalContext : DbContext
- {
- static PortalContext()
- {
- Database.SetInitializer<PortalContext>(null);
- //Database.SetInitializer(new CreateDatabaseIfNotExists<PortalContext>());
- //Database.SetInitializer(new DropCreateDatabaseAlways<PortalContext>());
- //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());
- }
-
- public PortalContext()
- : base("name=PortalContext")
- {
- }
-
- protected override void OnModelCreating(DbModelBuilder modelBuilder)
- {
- }
- }
- }
静态构造函数中设置数据库的初始化方式,在构造函数中指定App.config的connectionString。
3种初始化方式
- CreateDatabaseIfNotExists。默认,数据库不存在创建数据库。
- DropCreateDatabaseWhenModelChanges。数据模型发生改变的时候,先删除,后创建。
- DropCreateDatabaseAlways。总是先删除后创建,无论模型是否变化。
- Database.SetInitializer<PortalContext>(null); 关闭初始化功能。
4.基本常用设置
- 禁用延迟加载(Lazy Loading)
- 禁用关系数据的级联删除
- 禁用默认表名复数形式
- // 禁用延迟加载 DbContext类中设置
- this.Configuration.LazyLoadingEnabled = false;
- // 禁用一对多级联删除 OnModelCreating方法中设置
- modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
- // 禁用多对多级联删除 OnModelCreating方法中设置
- modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
- // 禁用默认表名复数形式 OnModelCreating方法中设置
- modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();