实体框架数据库生成错误

时间:2013-11-23 18:31:08

标签: c# mysql entity-framework

我正在创建一个模型优先数据库,而我正在尝试生成我的MySql架构。当我点击“从模型生成数据库”时,它会给我这个错误

Encountered the following errors while processing the template 'E:\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToMySQL.tt: 

Line 141, Column 0: 'Running transformation: System.NullReferenceException: Object     reference not set to an instance of an object.

   at Microsoft.VisualStudio.TextTemplatingE384461094E1DFC8313DC1AA4CE547BEB91411CCECC4E940B2CAA4A167C5F68F403F4103FA7B7E1BB1B4B97B86595FBABCAF62EA3385ABAA9AF47E060E49D857.GeneratedTextTransformation.GetProviderManifestToken(String edmxPath) in e:\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\GenerateMySQL.Utility.ttinclude:line 142

   at Microsoft.VisualStudio.TextTemplatingE384461094E1DFC8313DC1AA4CE547BEB91411CCECC4E940B2CAA4A167C5F68F403F4103FA7B7E1BB1B4B97B86595FBABCAF62EA3385ABAA9AF47E060E49D857.GeneratedTextTransformation.TransformText() in e:\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToMySQL.tt:line 121'

我去检查参考文件,我不知道该怎么做。以下是目标行的文件内容。

GenerateMySQL.Utility.ttinclude

(142 -->) foreach (var node in xmlDocument.SelectSingleNode("/edmx:Edmx/edmx:Runtime/edmx:StorageModels", namespaceMgr).ChildNodes)
{
  if (((XmlNode)node).Name.Equals("Schema") && ((XmlNode)node).Attributes.GetNamedItem("ProviderManifestToken") != null)
  {
      return ((XmlNode)node).Attributes["ProviderManifestToken"].Value;
  }
}
return String.Empty;

SSDLToMySQL.tt

EnvDTE.DTE env = (EnvDTE.DTE)((IServiceProvider)this.Host).GetService(typeof(EnvDTE.DTE));      
(121 -->)string serverVersion = GetProviderManifestToken(edmxPath);
string connection = String.Empty;

我知道以前曾经工作但是现在它只是给了我这个错误。它是一个非常简单的模式,有3个表,包含字符串和Int32,有些关系。除了初始设置Mysql连接之外,该项目是空的并且没有进行任何修改。

我在Visual Studio 2012上安装了MySql Connector版本6.7.4和Entity Framewiork v6.0.1。

2 个答案:

答案 0 :(得分:3)

我通过从

更改第121行的SSDLToMySQL.tt解决了这个问题
string serverVersion = GetProviderManifestToken(edmxPath);

string serverVersion = String.Empty;

现在看起来它找到了正确的.edmx文件。

答案 1 :(得分:0)

我试过Tristan Dube的答案,但遇到了后来的问题。我现在似乎有一个EF6,mysql-connector-net-6.8.3和mysql-visualstudio-plugin-1.1.1的工作配置。 mysql-installer-community-5.6.15.0没有提供这些,所以我在mysql.com的镜像上找到它们: ftp://gd.tuwien.ac.at/db/mysql/Downloads/Connector-Net/mysql-connector-net-6.8.3.msi ftp://gd.tuwien.ac.at/db/mysql/Downloads/MySQLInstaller/mysql-visualstudio-plugin-1.1.1.msi