2017-01-16 57 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

当然。出于这些原因,实体框架支持自定义约定。 –

相关问题