İhtiyacınız olanlar dışındaki tüm özellikler için Ignore
yöntemini çağırmak için yansıma kullanabilirsiniz olurdu. Böyle bir uzatma yöntemi oluşturarak elde edilebilir:
public static class EntityTypeConfigurationExtentions
{
public static EntityTypeConfiguration<TEntityType> IgnoreAllExcept<TEntityType>
(this EntityTypeConfiguration<TEntityType> t, params string[] except)
where TEntityType:class
{
var type = typeof(TEntityType);
var properties = type.GetProperties();
var dontIgnore = except ?? new string[0];
//Here you can add more constraints on the class properties
var toIgnore = properties.Where(x => !except.Contains(x.Name) &&
x.SetMethod != null).ToList();
foreach (var name in toIgnore)
{
var selector = GetIgnoreExpression<TEntityType>(name);
MethodInfo genericMethod = GetIgnoreMethod<TEntityType>(name.PropertyType);
genericMethod.Invoke(t, new object[] { selector });
}
return t;
}
private static MethodInfo GetIgnoreMethod<TEntityType>(Type propType)
{
var t = typeof(EntityTypeConfiguration<>);
t = t.MakeGenericType(typeof(TEntityType));
MethodInfo method = t.GetMethod("Ignore");
MethodInfo genericMethod = method.MakeGenericMethod(propType);
return genericMethod;
}
//This method creates the 'x=>x.PropertyName' expression for Ignore method
private static Expression GetIgnoreExpression<TEntityType>(PropertyInfo prop)
{
ParameterExpression arg = Expression.Parameter(typeof(TEntityType), "x");
MemberExpression property = Expression.Property(arg, prop.Name);
var exp = Expression.Lambda(property, new ParameterExpression[] { arg });
return exp;
}
}
Öncelikle biz bir ayarlayıcı vardır sınıfın bütün özelliklerini ayıklamak (daha kısıtlamaları varsa, en orada bunları sağlamak) ve ait olmayan Özel durum listesine, o özellik yoksaymak için her özellik için EntityTypeConfiguration<TEntityType>
sınıfının Ignore
yöntemini çağırırız.
Ignore
yöntemi çağırmak için, jenerik sınıf türünü edinip sınıfın
Ignore
yöntemi bulmak, sonra
Ignore
yöntemin genel tür sağlamak ve son olarak uygun argüman bunu çağırmak gerekir.
Ignore
yönteminin argümanı, TEntityType
sınıfından istenen özelliği seçen bir lambda ifadesi oluşturarak elde edilir.
bu uzantı sınıfı tanımladıktan sonra, böyle IgnoreAllExcept
çağırabilirsiniz:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TestClass>().IgnoreAllExcept("Id", "Name");
}
Ayrıca sınıfının özelliklerini seçer ifadelere except
parametresini değiştirerek, bu yöntemi geliştirebilir.
Bu neden sorun oluyor takım içerikler sağlayabilir mi? Diğer bir deyişle, özellikleri bu şekilde görmezden gelmek istediğiniz verileri nasıl kaydediyorsunuz? –
modelinde olası geçici çözüm here.include gerekli özellikleri olabilir ancak ViewModel özelliklerini göz ardı ve ebay SDK ile çalışıyorum @BrendanGreen (ihmal özelliklere sahip) görünümü modelinde – ManirajSS
tüm özelliklere sahip olan. Çok fazla sınıf var, bunların hiçbiri belirtilen anahtarlara sahip olmayan birçok mülk var. Veritabanına sadece az miktarda veri kaydetmek istiyorum. İstediğim her şeyi görmezden gelmek yerine, sadece ne istediğimi seçebilmek için çok zaman kazandıracağım. – user3012633