Database 类

[本页针对的是实体框架版本 6。最新版本以“实体框架”NuGet 包的形式提供。有关实体框架的更多信息,请参见 msdn.com/data/ef。]

DbContext 对象获取此类的实例,并且可使用该实例管理支持 DbContext 或连接的实际数据库。 这包括对数据库执行创建、删除和存在性检查操作。 请注意通过使用此类的静态方法,您只需使用一个连接 (即无需完整上下文)即可对数据库执行删除和存在性检查。

继承层次结构

System.Object
  System.Data.Entity.Database

命名空间:  System.Data.Entity
程序集:  EntityFramework(在 EntityFramework.dll 中)

语法

声明
<SuppressMessageAttribute("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification := "The DbContextTransaction and EntityTransaction should never be disposed by this class")> _
Public Class Database
用法
Dim instance As Database
[SuppressMessageAttribute("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification = "The DbContextTransaction and EntityTransaction should never be disposed by this class")]
public class Database
[SuppressMessageAttribute(L"Microsoft.Design", L"CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification = L"The DbContextTransaction and EntityTransaction should never be disposed by this class")]
public ref class Database
[<SuppressMessageAttribute("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification = "The DbContextTransaction and EntityTransaction should never be disposed by this class")>]
type Database =  class end
public class Database

Database 类型公开以下成员。

属性

  名称 描述
公共属性 CommandTimeout 获取或设置所有上下文操作的超时值(以秒为单位)。默认值为 null,null 值指示将使用基础提供程序的默认值。
公共属性 Connection 返回此上下文使用的连接。如果连接不存在,这可能会导致创建连接。
公共属性 CurrentTransaction 获取基础存储连接在其中登记的事务。可能为 null。
公共属性静态成员 DefaultConnectionFactory 已过时。 在从数据库名称或连接字符串创建 DbConnection 时要使用的连接工厂。
公共属性 Log 设置此属性以将 DbContext 生成的 SQL 记录到给定委托。例如,若要记录到控制台,请将此属性设置为 Write(String)

顶部

方法

  名称 描述
公共方法 BeginTransaction() 对基础存储连接开始一个事务
公共方法 BeginTransaction(IsolationLevel) 使用指定的隔离级别对基础存储连接开始一个事务
公共方法 CompatibleWithModel 检查数据库是否与当前 Code First 模型兼容。
公共方法 Create 在数据库服务器上为支持上下文中定义的模型创建一个新的数据库。请注意,在运行数据库初始化策略之前调用此方法将禁止执行该策略。
公共方法 CreateIfNotExists 在数据库服务器上为支持上下文中定义的模型创建一个新的数据库(但仅在该服务器上没有带相同名称的数据库时这样做)。
公共方法 Delete() 如果数据库服务器上存在数据库,则删除该数据库;否则不执行任何操作。从初始值设定项之外调用此方法会将数据库标记为尚未初始化。这意味着如果在删除数据库后尝试再次使用它,则将再次运行所有初始值设定项集,通常将尝试再次自动创建数据库。
公共方法静态成员 Delete(DbConnection) 如果数据库服务器上存在数据库,则删除该数据库;否则不执行任何操作。
公共方法静态成员 Delete(String) 如果数据库服务器上存在数据库,则删除该数据库;否则不执行任何操作。按照 DbContext 类的文档中描述的方法,使用给定的数据库名称或连接字符串创建与数据库的连接。
公共方法 Equals 确定指定的数据库是否等于当前数据库。 (重写 Object.Equals(Object)。)
公共方法 ExecuteSqlCommand(String, Object[]) 对数据库执行给定的 DDL/DML 命令。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 ExecuteSqlCommand(TransactionalBehavior, String, Object[]) 对数据库执行给定的 DDL/DML 命令。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 ExecuteSqlCommandAsync(String, Object[]) 对数据库异步执行给定的 DDL/DML 命令。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 ExecuteSqlCommandAsync(String, CancellationToken, Object[]) 对数据库异步执行给定的 DDL/DML 命令。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 ExecuteSqlCommandAsync(TransactionalBehavior, String, Object[]) 对数据库异步执行给定的 DDL/DML 命令。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 ExecuteSqlCommandAsync(TransactionalBehavior, String, CancellationToken, Object[]) 对数据库异步执行给定的 DDL/DML 命令。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 Exists() 检查服务器上是否存在数据库。
公共方法静态成员 Exists(DbConnection) 检查服务器上是否存在数据库。
公共方法静态成员 Exists(String) 检查服务器上是否存在数据库。按照 DbContext 类的文档中描述的方法,使用给定的数据库名称或连接字符串创建与数据库的连接。
受保护的方法 Finalize (继承自 Object。)
公共方法 GetHashCode 返回此数据库的哈希函数。 (重写 Object.GetHashCode()。)
公共方法 GetType 获取当前实例的 Type
公共方法 Initialize 在此上下文上运行注册的 IDatabaseInitializer<TContext>。如果将“force”设置为 true,则将运行初始值设定项,不管它之前是否已运行。如果在应用程序正在运行时删除了数据库并且需要重新初始化数据库时,则这样做会很有用。如果将“force”设置为 false,则仅在尚未为此应用程序域中的此上下文、模型和连接运行初始值设定项的情况下运行它。当必须确保在开始某些操作之前已创建数据库并设定其种子时(这样偷懒的做法会导致问题,例如,当操作是事务的一部分时),通常会使用此方法。
受保护的方法 MemberwiseClone (继承自 Object。)
公共方法静态成员 SetInitializer<TContext> 设置要用于给定上下文类型的数据库初始值设定项。当给定的 DbContext 类型首次用于访问数据库时调用数据库初始值设定项。Code First 上下文的默认策略是 CreateDatabaseIfNotExists<TContext> 的实例。
公共方法 SqlQuery(Type, String, Object[]) 创建一个原始 SQL 查询,该查询将返回给定类型的元素。类型可以是包含与从查询返回的列名匹配的属性的任何类型,也可以是简单的基元类型。该类型不必是实体类型。即使返回对象的类型是实体类型,上下文也决不会跟踪此查询的结果。使用 SqlQuery(String, Object[]) 方法可返回上下文跟踪的实体。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.SqlQuery(typeof(Post), "SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.SqlQuery(typeof(Post), "SELECT * FROM dbo.Posts WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 SqlQuery<TElement>(String, Object[]) 创建一个原始 SQL 查询,该查询将返回给定泛型类型的元素。类型可以是包含与从查询返回的列名匹配的属性的任何类型,也可以是简单的基元类型。该类型不必是实体类型。即使返回对象的类型是实体类型,上下文也决不会跟踪此查询的结果。使用 SqlQuery(String, Object[]) 方法可返回上下文跟踪的实体。与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。您提供的任何参数值都将自动转换为 DbParameter。context.Database.SqlQuery&lt;Post&gt;("SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。这允许您在 SQL 查询字符串中使用命名参数。context.Database.SqlQuery&lt;Post&gt;("SELECT * FROM dbo.Posts WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
公共方法 ToString 返回数据库的字符串表示形式。 (重写 Object.ToString()。)
公共方法 UseTransaction 如果您希望实体框架在外部事务内执行命令,则允许用户传递在 Database 对象外创建的数据库事务。或者,传递 null 以清除该事务的框架知识。

顶部

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

请参阅

参考

System.Data.Entity 命名空间