Entity FrameworkCoreエンティティからSQLMERGEステートメントを生成しようとしています。そのためには、すべてのエンティティプロパティをSQL文字列に変換する必要があります。例:
bool => 1 or 0
string => 'string'
int => 123
EF CoreはValueConverterSelector
、すべての異なる内部値コンバーターとカスタム値コンバーターのファクトリとしてクラスを使用しているようです。私はそれを文脈から得る必要があります。どうすればいいですか?
更新: Ivan Stoevのおかげで、彼はconverterSelectorを取得するために次の方法を提案しました。
var converterSelector = context.GetInfrastructure().GetService<IValueConverterSelector>()
var converters = converterSelector.Select(entry.Metadata.ClrType, prop.Metadata.ClrType);
// Converters collection is empty ;(
私はそれに関して新しい問題に直面しています。プライベートフィールドを調べると、このセレクターにはコンバーターが登録されていないことがわかります。したがって、エンティティの各プロパティに適切なコンバーターを取得できません。EFが使用している正確なカスタムおよび組み込みコンバーターを備えたコンバーターセレクターが必要です。何か案は?
Entity Frameworkを使用してプロパティのSQL値を取得するには、次のことを行う必要があります。
var entry = context.Entry(model);
var prop = entry.Properties.First(); // Let's say for the 1st one
var sqlValue = prop.Metadata
.FindRelationalMapping()
.GenerateProviderValueSqlLiteral(prop.CurrentValue);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加