Mon*_*man 117 datetime entity-framework sql-server-2005 datetime2 sql-server-2008
我已经针对2008数据库构建了一个实体框架模型.一切都适用于2008数据库.当我尝试更新2005数据库上的实体时,我收到此错误.
The version of SQL Server in use does not support datatype 'datetime2
我在构建数据库时没有使用任何2008功能.我在代码中找不到对datetime2的任何引用.并且,是的,该列在数据库中被定义为"datetime".
Ric*_*son 189
快速谷歌指出我看起来像解决方案.
在文件编辑器中打开EDMX(或在Visual Studio中"以...打开"并选择XML编辑器).在顶部,您将找到存储模型,它具有属性ProviderManifestToken.这应该具有值2008.将其更改为2005,重新编译,一切正常.
注意:每次从数据库更新模型时都必须执行此操作.
Jas*_*son 11
快速查看线:
<Schema Namespace="Foobar.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" >
Run Code Online (Sandbox Code Playgroud)
小智 10
这是非常令人沮丧的,我很惊讶MS决定不这样做,所以你可以针对给定的SQL版本.为了确保我们的目标是2005年,我编写了一个简单的控制台应用程序并在PreBuild步骤中调用它.
预建步骤如下所示:
$(SolutionDir)Artifacts\SetEdmxVer\SetEdmxSqlVersion $(ProjectDir)MyModel.edmx 2005
Run Code Online (Sandbox Code Playgroud)
代码在这里:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace SetEdmxSqlVersion
{
class Program
{
static void Main(string[] args)
{
if (2 != args.Length)
{
Console.WriteLine("usage: SetEdmxSqlVersion <edmxFile> <sqlVer>");
return;
}
string edmxFilename = args[0];
string ver = args[1];
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(edmxFilename);
XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
mgr.AddNamespace("edmx", "http://schemas.microsoft.com/ado/2008/10/edmx");
mgr.AddNamespace("ssdl", "http://schemas.microsoft.com/ado/2009/02/edm/ssdl");
XmlNode node = xmlDoc.DocumentElement.SelectSingleNode("/edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema", mgr);
if (node == null)
{
Console.WriteLine("Could not find Schema node");
}
else
{
Console.WriteLine("Setting EDMX version to {0} in file {1}", ver, edmxFilename);
node.Attributes["ProviderManifestToken"].Value = ver;
xmlDoc.Save(edmxFilename);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33528 次 |
| 最近记录: |