我正在按以下方式构建连接字符串(使用适当的连接参数值)。
var builder = new SqlConnectionStringBuilder
{
PersistSecurityInfo = false,
InitialCatalog = "mydatabase",
UserID = "myuser",
Password = "mydatabase",
DataSource = "myserver"
};
var connectionString = builder.ConnectionString;
using (var db = Helper.MakeContext(connectionString)) {
var carrier = db.Carriers.FirstOrDefault(); // fails here with error
Console.WriteLine(carrier.Carrier);
}
Run Code Online (Sandbox Code Playgroud)
Helper 在不同的项目中
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using ApiForVivtrack3.Entities;
public static class Helper
{
//public string ConnectionString { get; set; }
public static ApiDbContext MakeContext(string connectionString)
{
var db = new ApiDbContext(connectionString);
return db;
}
}
Run Code Online (Sandbox Code Playgroud)
EF 6.2DbContext设置如下
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity;
namespace ApiForVivtrack3.Entities
{
public partial class ApiDbContext : DbContext
{
public ApiDbContext(string efConnectString)
: base(efConnectString)
{
}
// DbSet declarations
}
}
Run Code Online (Sandbox Code Playgroud)
调用堆栈是
Test method UnitTestProject1.UnitTest1.TestMethod1 threw exception:
System.InvalidOperationException: The store type 'decimal(18,4)' could not be found in the SqlServer provider manifest
at System.Data.Entity.Utilities.DbProviderManifestExtensions.GetStoreTypeFromName(DbProviderManifest providerManifest, String name)
at System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration.ConfigureColumn(EdmProperty column, EntityType table, DbProviderManifest providerManifest)
at System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration.Configure(EdmProperty column, EntityType table, DbProviderManifest providerManifest, Boolean allowOverride, Boolean fillFromExistingConfiguration)
at System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration.<>c__DisplayClass4.<Configure>b__3(Tuple`2 pm)
at System.Data.Entity.Utilities.IEnumerableExtensions.Each[T](IEnumerable`1 ts, Action`1 action)
at System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration.Configure(IEnumerable`1 propertyMappings, DbProviderManifest providerManifest, Boolean allowOverride, Boolean fillFromExistingConfiguration)
at System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration.ConfigurePropertyMappings(IList`1 propertyMappings, DbProviderManifest providerManifest, Boolean allowOverride)
at System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.ConfigurePropertyMappings(DbDatabaseMapping databaseMapping, EntityType entityType, DbProviderManifest providerManifest, Boolean allowOverride)
at System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.Configure(EntityType entityType, DbDatabaseMapping databaseMapping, DbProviderManifest providerManifest)
at System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntityTypes(DbDatabaseMapping databaseMapping, ICollection`1 entitySets, DbProviderManifest providerManifest)
at System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.Configure(DbDatabaseMapping databaseMapping, DbProviderManifest providerManifest)
at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
at UnitTestProject1.UnitTest1.TestMethod1() in D:\devnet10\SBD.Common\UnitTestProject2\UnitTest1.cs:line 39
Run Code Online (Sandbox Code Playgroud)
我已经对 进行了文本搜索Decimal(18,但没有任何结果。
我知道这是一个 OQ。鉴于尚未得到答复,我将分享我必须做的事情。
对 (18, 4) 或错误消息中的任何值执行查找 (ctrl F)。您很可能会发现文本字符串显示在解决方案的 Fluent API 部分中。就我而言,我将 Fluent API 代码从 CORE 应用程序复制到我的 EF 6 应用程序中。Core 使用的“HasColumnType()”与使用“HasPrecision()”的 EF 6 不兼容。
将“HasColumnType(”替换为“HasPrecision(”)并再次运行代码...
| 归档时间: |
|
| 查看次数: |
2416 次 |
| 最近记录: |