Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Entity Framework中的.edmx文件生成数据库?_C#_Database_Entity Framework_Edmx_Auto Generate - Fatal编程技术网

C# 如何从Entity Framework中的.edmx文件生成数据库?

C# 如何从Entity Framework中的.edmx文件生成数据库?,c#,database,entity-framework,edmx,auto-generate,C#,Database,Entity Framework,Edmx,Auto Generate,我不得不突然转而致力于代码优先实体框架4.1。一开始我对这个框架一无所知,但在过去的8个小时里,我读了博客和文章,现在感觉舒服多了 是迄今为止我在这个主题上看到的最好的博客之一,但给出的步骤与我的经验不符。特别是,我需要更多地关注第3步和第4步(“分别创建模型”和“交换到DbContext代码生成”)。我无法从定义的EntitySet生成数据库。我得到了SQL,我可以执行,但我得到了以下错误: Could not locate entry in sysdatabases for "MyBD" d

我不得不突然转而致力于代码优先实体框架4.1。一开始我对这个框架一无所知,但在过去的8个小时里,我读了博客和文章,现在感觉舒服多了

是迄今为止我在这个主题上看到的最好的博客之一,但给出的步骤与我的经验不符。特别是,我需要更多地关注第3步和第4步(“分别创建模型”和“交换到DbContext代码生成”)。我无法从定义的EntitySet生成数据库。我得到了SQL,我可以执行,但我得到了以下错误:

Could not locate entry in sysdatabases for "MyBD" database . No entry found with that name. Make sure that the name is entered correctly entity framework.
如果我再次执行SQL,在数据库中已经存在的表的名称后面会出现相同的错误

如果在ServerExplorer中刷新DataConnection,则不会创建我在EntityFramework中定义的表

如何消除此错误并成功生成.edmx中的表


此外,我在解决方案资源管理器中找不到右键单击以从所选类文件“生成数据库”的选项,该类文件具有从DBContext对象继承的上下文类。我从Microsoft安装了Entity framework 4.1,因此它应该出现在那里。。。如何获取“生成数据库”选项?

如果要从模型创建数据库,需要先选择空模型。以下是创建db的其他步骤:

  • 选择新连接
  • 设置服务器名称:如果您安装了它,只需键入。选择默认值。您也可以尝试(本地)
  • 设置新的数据库名称
  • 将DDL脚本复制到SQL server management studio的查询屏幕
  • 运行脚本以创建数据库
  • 运行脚本后,您将获得初始表。配置文件将具有名为容器名称的连接字符串

    现在,当您想要切换到类似于TT文件示例的代码生成时,可以右键单击并添加代码生成。它将为实体模型创建分部类,为dbcontext创建一个文件。与此类似:

     using System;
        using System.Collections.Generic;
    
        public partial class Contact
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    
    上下文将只有一个表

     public partial class PersonModelContainer : DbContext
        {
            public PersonModelContainer()
                : base("name=PersonModelContainer")
            {
            }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                throw new UnintentionalCodeFirstException();
            }
    
            public DbSet<Contact> Contacts { get; set; }
        }
    
    public分部类PersonModelContainer:DbContext
    {
    公众人物模型容器()
    :base(“name=PersonModelContainer”)
    {
    }
    模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
    {
    抛出新代码FirstException();
    }
    公共数据库集联系人{get;set;}
    }
    
    你不需要TT模型。您可以直接添加这些文件。您需要一个从DbContext继承的上下文类,以及每种类型实体的一个分部类文件。如果您对模型进行更改,EF将检测到。您需要定义Db初始值设定项。对于该网页上的示例演示,您可以向另一个方法添加初始值设定项。如果它是一个web项目,您可以将这个init函数添加到Global.asax->application\u Start中进行初始开发。对于初始值设定项,您有不同的选项。我使用drop和create进行初始开发

     static void InitDbCheck()
            {
                Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PersonModelContainer>());
                using (var db = new PersonModelContainer())
                {
                    //accessing a record will trigger to check db.
                    int recordCount = db.Contacts.Count();
                }
            }
    
            static void Main(string[] args)
            {
    
    
    
                using (var db = new PersonModelContainer())
                {
                    // Save some data
                    db.Contacts.Add(new Contact { Name = "Bob" });
                    db.Contacts.Add(new Contact { Name = "Ted" });
                    db.Contacts.Add(new Contact { Name = "Jane" });
                    db.SaveChanges();
    
                    // Use LINQ to access data
                    var people = from p in db.Contacts
                                 orderby p.Name
                                 select p;
    
                    Console.WriteLine("All People:");
                    foreach (var person in people)
                    {
                        Console.WriteLine("- {0}", person.Name);
                    }
    
                    // Change someones name
                    db.Contacts.First().Name = "Janet";
                    db.SaveChanges();
                }
            }
    
    静态void InitDbCheck()
    {
    SetInitializer(新的DropCreateDatabaseIfModelChanges());
    使用(var db=newPersonModelContainer())
    {
    //访问记录将触发检查数据库。
    int recordCount=db.Contacts.Count();
    }
    }
    静态void Main(字符串[]参数)
    {
    使用(var db=newPersonModelContainer())
    {
    //保存一些数据
    添加(新联系人{Name=“Bob”});
    添加(新联系人{Name=“Ted”});
    Add(新联系人{Name=“Jane”});
    db.SaveChanges();
    //使用LINQ访问数据
    var people=来自数据库联系人中的p
    orderby p.Name
    选择p;
    Console.WriteLine(“所有人:”);
    foreach(人与人之间的变量)
    {
    Console.WriteLine(“-{0}”,person.Name);
    }
    //改名
    db.Contacts.First().Name=“Janet”;
    db.SaveChanges();
    }
    }
    
    以下是MSDN在

    [.edmx]文件

    为了完整起见,在此处复制/粘贴:

    从概念模型生成数据库的步骤

    1-将.edmx文件添加到项目中。

    有关将.edmx文件添加到项目的信息,请参见如何: 创建新的.edmx文件(实体数据模型工具)以及如何:添加 现有的.edmx文件(实体数据模型工具)

    2-构建概念模型。

    可以使用ADO.NET实体数据模型设计器(实体设计器) 要创建实体和关系,或者可以手动编辑 .edmx文件来构建概念模型。有关详细信息,请参阅 实现高级实体框架功能和CSDL、SSDL和 MSL规范

    注意:构建概念模型时,会显示有关未映射的警告 实体和关联可能会出现在错误列表中。你可以忽略 这些警告是因为创建数据库向导将添加存储 模型和映射信息(请参见步骤3)

    3-在实体设计器表面上的空白处单击鼠标右键,然后选择 从模型生成数据库。

    生成数据库的“选择数据连接”对话框 将显示向导(实体数据模型工具)

    4-单击“新建连接”按钮或选择现有连接 按钮提供数据库连接。

    必须提供数据库连接,以便 可以根据数据库中的属性类型确定目标数据库