0

实体框架中,我们可以使用模型优先,代码优先,数据库优先3种方法,但每种方法都需要手动触摸(意味着创建数据库或创建模型或编写POCO类代码或实体类代码)才能进行下一步(在上下文中使用 EF)。

如果我想以编程方式创建数据库和表以及表关系,并且仍然希望拥有 EntityFramework 4.3 的功能怎么办。

更具体地说,从这个示例http://support.microsoft.com/kb/307283我们可以使用 SQL 命令创建数据库、表和所有内容,但我们不能拥有实体框架的优势。那么如果我们想拥有它,我们应该怎么做呢?

要赋予创建动态表字段的能力,这些步骤是不够的。在所有 3 个步骤中,数据库、表和表列都是固定的。用户无法动态创建新表或列。http://support.microsoft.com/kb/307283在这篇文章中,它展示了如何使用 SQL 创建手动数据库、表等,但它基于 ADO.NET,但我希望实体管理器这样做。它不会是魔法,当然,应该有编程(我想知道编程方法)。

4

3 回答 3

2

我相信您希望能够使用 SQL 命令创建数据库和数据库对象。然后将这些对象映射到 EntityFramework 上下文。根据您的项目,您可以有多个从 DBContext 派生的上下文,每个上下文都执行一些特定的角色。

如果是这样,则 DbContext 中的 Database 类具有执行 SQL 的功能。简单地在您的上下文对象上调用这些函数。

MyContext db = new MyContext() 
//Where MyContext :DbContext (MyContext derives from DbContext)

db.Database.ExecuteSqlCommand(sqlcommand, params);
//There are other method in this class like SqlQuery Read documentation.
//The SqlQury is also available on the entities like db.MyEntitySet.SqlQuery(...)

如果您希望您的 EF 代码与现有数据库一起使用,那么您可以关注此博客

如果您希望您的上下文使用数据库名称,那么您可以在构造函数中传递它,如下所示。您可以尝试将此类上下文与现有数据库一起使用。

public class MyContext : DbContext
{
        public MyContext():base("MyDatabase")
        {

        }
     .....
}
于 2012-06-10T08:48:37.550 回答
0

如果您使用 EF 的 Code First 方法,DatabaseInitializer 默认策略是“如果不存在则创建数据库”。因此,基于连接字符串,DbContext 将检查数据库是否存在。如果未找到,EF 将运行必要的脚本来第一次为您创建数据库、表和关系。要运行的脚本将根据您的模型(POCO 类和映射配置/数据注释)生成。

假设您要创建 2 个表:Customers 和 Orders。

public class Customer
{
    public int Id { get;set; }
    public string Name { get;set; }

    public ICollection<Order> Orders { get; set; }
}

public class Order
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public virtual Customer Customer { get; set; }
    /* ... more fields*/
}

public class MyContext: DbContext
{
    public DbSet<Order> Orders { get; set; }
    public DbSet<Customer> Customers { get; set; }

    public MyContext(): base("MyConnectionString")
    {
    }


}

当您实例化 MyContext 类时,将创建表、字段和外键约束:

using (var ctx = new MyContext())
{
    /**/
}
于 2012-06-09T21:46:20.250 回答
0

我支持 Abhijit 对此的回答。我假设您已经准备好 SQL 队列(表、SProcs 等)。

现在要创建编写 EF 查询,您只需要访问 EF 中的 dbcontext 类。正如我们在 LINQ 中所做的那样。

这是 MSDN mag 中的一篇不错的文章:http: //msdn.microsoft.com/en-us/magazine/gg232765.aspx

希望能帮助到你!

于 2012-06-10T10:38:41.110 回答