2017-01-16 9 views
0

EFを使用したデータベースの最初のアプローチがあります。 EntityTypeConfiguration<T>を使用して、マッピングを設定します。ここでTはエンティティです。エンティティフレームワークを使用してPrimitivePropertyConfigurationからプロパティのタイプを取得します

私はしばしばProperty(t => t.EntityType).HasColumnName("EntityType_ID");のようなことをします。戻り値の型がProperty()である拡張メソッドを持っていればいいです。これはPrimitivePropertyConfigurationです。そのようです。

public static class EntityTypeConfigurationExtension 
{ 
    public static PrimitivePropertyConfiguration IsForeignKey(this PrimitivePropertyConfiguration propertyConfiguration) 
    { 
     Type typeOfEntity; //The problem is, how to know this type without passing it to this method? 
     return propertyConfiguration.HasColumnName(typeOfEntity.Name + "_ID"); 
    } 
} 

問題は、コメント行でわかるように、設定されているプロパティのタイプを取得する方法がありません。どのように構成されているプロパティの種類を取得できますか?

+0

私は 'propertyConfiguration.GetType()'はあなたが探しているものを与えてくれないと思いますか? – silkfire

+0

'GetType()'は、それが使用されているオブジェクトの型を返します。したがって、この場合は 'PrimitivePropertyConfiguration'を返します。 MSDN 'Object.GetType'メソッドを参照してください。https://msdn.microsoft.com/nl-nl/library/system.object.gettype(v=vs.110).aspx –

+0

ええ、私は、そのクラスには独自の' GetType'メソッドを使用した場合、Entity固有のものであることを期待していました。https://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.configuration.primitivepropertyconfiguration.gettype%28v=vs。 113%29.aspx?f = 255&MSPPError = -2147217396#M:System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration.GetType – silkfire

答えて

1

すべての外部キーに「_ID」を追加する必要がある場合は、独自のカスタム規約を作成できます。このように:その後、

public class SuffixForeignKeyNameConvention : IStoreModelConvention<AssociationType> 
{ 
    public SuffixForeignKeyNameConvention() 
    { 
    } 
public void Apply(AssociationType association, DbModel model) 
{ 
    if (association.IsForeignKey) 
    { 
     AddSuffix(association.Constraint.ToProperties); 
    } 
} 

private void AddSuffix(IEnumerable<EdmProperty> properties) 
{ 
    string result; 
    foreach (var property in properties) 
    { 
     result = property.Name; 

     property.Name = $"{result}_ID"; 
    } 
} 
} 

そして、それを適用します。

modelBuilder.Conventions.Add(new SuffixForeignKeyNameConvention()); 

、すべての外部キーが_IDサフィックスを持つ必要があり、この規則を使用した後。それが役に立てば幸い。

+0

これはデータベースの最初のアプローチでも機能しますか? –

+0

エンティティフレームワークは、これらの理由によりカスタムコンベンションをサポートします。 –

関連する問題