C# 如何从Entity Framework中的.edmx文件生成数据库?
我不得不突然转而致力于代码优先实体框架4.1。一开始我对这个框架一无所知,但在过去的8个小时里,我读了博客和文章,现在感觉舒服多了 是迄今为止我在这个主题上看到的最好的博客之一,但给出的步骤与我的经验不符。特别是,我需要更多地关注第3步和第4步(“分别创建模型”和“交换到DbContext代码生成”)。我无法从定义的EntitySet生成数据库。我得到了SQL,我可以执行,但我得到了以下错误: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
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的其他步骤:
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-单击“新建连接”按钮或选择现有连接
按钮提供数据库连接。
必须提供数据库连接,以便
可以根据数据库中的属性类型确定目标数据库