2016-07-17 3 views
4

JSON列を使用して移行を作成しようとしています。ここに私が試したものです:Npgsql/EF 6 - json列

[Column(TypeName = "Jsonb")] 
    public string Data { get; set; } 

    [Column(TypeName = "Json")] 
    public string Data { get; set; } 

    modelBuilder.Entity<Member>().Property(p => p.Data).HasColumnType("Json"); 

    modelBuilder.Entity<Member>().Property(p => p.Data).HasColumnType("Jsonb"); 

何が全く機能していない、ここでの例外があります:

のSystem.InvalidOperationException:シーケンスSystem.Linq.Enumerable.Single [TSOURCE](IEnumerableをで一致する要素 が含まれていませんSystem.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration.ConfigureColumn(EdmPropertyカラム、耳鼻咽喉科で1 source, Func 2述語)System.Data.Entity.Utilities.DbProviderManifestExtensions.GetStoreTypeFromName(DbProviderManifest providerManifest、文字列名で ) System.Data.Entity.ModelConfigurationでSystem.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration.Configure(EdmPropertyカラム、EntityTypeテーブル、DbProviderManifest providerManifest、ブールAllowOverrideのブールfillFromExistingConfiguration) でityTypeテーブル、DbProviderManifest providerManifest) .Configuration.Properties.Primitive.PrimitivePropertyConfiguration。 <> c__DisplayClass4.b__3(タプル2 pm) at System.Data.Entity.Utilities.IEnumerableExtensions.Each[T](IEnumerable 1 TS、アクション1 action) at System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration.Configure(IEnumerable 1 propertyMappings、DbProviderManifest providerManifest、ブールAllowOverrideのブールfillFromExistingConfiguration)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 )System.Data.Entity.DbModelBuilderでSystem.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest、DbProviderInfo providerInfo) でSystem.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.Configure(DbDatabaseMapping databaseMapping、DbProviderManifest providerManifest) で.Build(DbConnection providerConnection) at System.Data.Entity.Internal.LazyInternalC System.Data.EntityでSystem.Data.Entity.Internal.Linq.InternalSet 1.get_InternalContext() at System.Data.Entity.Internal.Linq.InternalSet 1.get_Local() でSystem.Data.Entity.Internal.RetryLazy 2.GetValue(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() でontext.CreateModel(LazyInternalContext internalContext) CにおけるSystem.Data.Entity.DbModelBuilderExtensions.RegisterUserAccountChildTablesForDelete [TKEY、TAccount、TUserClaim、TLinkedAccount、TLinkedAccountClaim、TPasswordResetSecret、TTwoFactorAuthToken、TUserCertificate(DbContext CTX)で.DbSet`1.get_Local() :\ ballen \ githubの\ brockallen \ BrockAllen.MembershipReboot \ SRC \ BrockAllen.MembershipReboot.Ef \ DbModelBuilderExtensions.cs:ライン26

は、ここに私の設定です:

<package id="EntityFramework" version="6.1.1" targetFramework="net452" /> 
<package id="EntityFramework6.Npgsql" version="3.1.1" targetFramework="net452" /> 
<package id="Npgsql" version="3.1.6" targetFramework="net452" /> 

答えて

1

これは完全に実行可能ですが、モデルに注釈を付けたり、流暢な設定を使用するのではなく、生成された移行を変更する必要があります。あなたの生成された移行では、data列の宣言はstoreTypedefaultValueSql引数を使用するように変更します

data = c.String(nullable: false, storeType: "jsonb", defaultValueSql: "'{}'::jsonb") 

私はこれがEntityFramework6.Npgsql 3.1.1と3.1.7 Npgsqlのために働く確認することができ、かつ保存して、該当するロードされます問題のないエンティティ。以前のバージョンを保証できません。