Engineer Blog開発者ブログ

2019.8.26

C#ネタ その④ EntityDataModel(EDM)からカラムのプロパティを取得する

※パフォーマンスの観点からあまり実用向けではありません。。。

データベースへINSERTを行う前に、桁数チェックを行うと思いますが、桁数自体を定数ファイルに持たせる方法だとDBの桁数を変えたときに修正し忘れるというリスクもあります。

そこで、今回EDMを用いた開発を行っている最中に、どうにかEDMから項目の情報を取得できないか調査し、以下の方法で取得できる事が判明しました。

 

EntityDataModelの場合、EdmPropertyクラスにテーブルの情報が格納されています。

https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.core.metadata.edm.edmproperty?view=entity-framework-6.2.0

 

データベースコンテキストから取得しますが、すんなり取得できるわけではなく、

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制約など様々なテーブル情報を取得することができます。

 

Contact
お問い合わせ

電話番号0120 - 889 - 236
受付時間:平日 9:00-18:00