2017-01-16 32 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的方法,我很希望它是更多的實體特定: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

當然。出於這些原因,實體框架支持自定義約定。 –

相關問題