Ich mache eine Hilfsmethode, wo es automatisch zufällige Werte zu einer Eigenschaft einer gegebenen Entität (Klasse) festlegen würde, so dass ich nicht jede Eigenschaft mit füllen muss ein Wert beim Testen.List <PropertyInfo> außer List <PropertyInfo> funktioniert nicht
In meinem Fall erbt jede Entität von BaseEntity-Klasse, die die Eigenschaften ID, CreatedBy, CreatedOn, etc ... hat. Im Grunde hat diese Klasse alle Eigenschaften, die über alle Entitäten verteilt sind.
Was ich hier erreichen möchte, ist, die einzigartigen Eigenschaften von den allgemeinen zu trennen.
Hier ist mein Code:
public static TEntity PopulateProperties<TEntity>(TEntity entity)
{
try
{
// Since every entity inherits from EntityBase, there is no need to populate properties that are in EntityBase class
// because the Core project populates them.
// First of all, we need to get all the properties of EntityBase
// and then exlude them from the list of properties we will automatically populate
// Get all properties of EntityBase
EntityBase entityBase = new EntityBase();
List<PropertyInfo> entityBaseProperties = new List<PropertyInfo>();
foreach (var property in entityBase.GetType().GetProperties())
{
entityBaseProperties.Add(property);
}
// Get all properties of our entity
List<PropertyInfo> ourEntityProperties = new List<PropertyInfo>();
foreach (var property in entity.GetType().GetProperties())
{
ourEntityProperties.Add(property);
}
// Get only the properties related to our entity
var propertiesToPopulate = ourEntityProperties.Except(entityBaseProperties).ToList();
// Now we can loop throught the properties and set values to each property
foreach (var property in propertiesToPopulate)
{
// Switch statement can't be used in this case, so we will use the if clause
if (property.PropertyType == typeof(string))
{
property.SetValue(entity, "GeneratedString");
}
else if (property.PropertyType == typeof(int))
{
property.SetValue(entity, 1994);
}
}
return entity;
}
finally
{
}
}
Die propeblem mit ist var propertiesToPopulate = entityBaseProperties.Except(ourEntityProperties).ToList();
Was erwarte ich eine Liste von Propertyinfo-Objekte, die nur einzigartig für diese Einheit sind, aber ich bin immer ALL bekommen die Eigenschaften meiner Entität. Diese Zeile filtert die Liste nicht wie beabsichtigt.
Irgendwelche Hilfe warum ??
Wenn die Eigenschaften eindeutig sein sollten dem _derived_ Entitätstyp verwenden können, sollten nicht Es ist 'propertiesToPopulate = ourEntityProperties.Except (entityBaseProperties)'? –
@ RenéVogt Ich dachte auch, dass es so funktionieren sollte. Aber das tut es nicht. –