お知らせ
2019年8月26日
C#ネタ その④ EntityDataModel(EDM)からカラムのプロパティを取得する
※パフォーマンスの観点からあまり実用向けではありません。。。
データベースへINSERTを行う前に、桁数チェックを行うと思いますが、桁数自体を定数ファイルに持たせる方法だとDBの桁数を変えたときに修正し忘れるというリスクもあります。
そこで、今回EDMを用いた開発を行っている最中に、どうにかEDMから項目の情報を取得できないか調査し、以下の方法で取得できる事が判明しました。
EntityDataModelの場合、EdmPropertyクラスにテーブルの情報が格納されています。
データベースコンテキストから取得しますが、すんなり取得できるわけではなく、
public EdmProperty GetFieldEdmProperty(DBContext dbContext, string _entityName, string _fieldName) { System.Data.Entity.Core.Objects.ObjectContext objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dbContext).ObjectContext; System.Data.Entity.Core.Metadata.Edm.EntityContainer entityContainer = objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace); return entityContainer.EntitySets[_entityName].ElementType.Properties[_fieldName]; }
【MaxLengthを取得する場合】
var maxLength = GetFieldEdmProperty(dbContext, [Entity(テーブル)名], [フィールド名]).MaxLength;
その他、NULL制約など様々なテーブル情報を取得することができます。