Activités d'entités
Cette rubrique s'applique à Windows Workflow Foundation 4.
Cet exemple montre comment utiliser ADO.NET Entity Framework avec Windows Workflow Foundation pour simplifier l'accès aux données.
ADO.NET Entity Framework permet aux développeurs d'utiliser des données sous forme d'objets spécifiques au domaine, de propriétés et de relations, telles Customers, Orders, Order Details et les relations entre ces entités. Pour ce faire, ADO.NET Entity Framework fournit un niveau d'abstraction qui permet la programmation sur un modèle d'application conceptuel au lieu d'une programmation directe sur un schéma de stockage relationnel. Pour plus d'informations sur le sujet suivant ADO.NET Entity Framework, consultez ADO.NET Entity Framework.
Détails de l'exemple
Cet exemple utilise la base de données Northwind
et inclut des scripts pour la création et la suppression de la base de données Northwind
(Setup.cmd et Cleanup.cmd). Les projets dans cet exemple incluent un Entity Data Model basé sur la base de données Northwind
. Vous pouvez rechercher le modèle en ouvrant le fichier Northwind.edmx
inclus dans le projet. Il s'agit du modèle qui définit la forme des objets accessibles à l'aide d'ADO.NET Entity Framework.
Les activités suivantes sont incluses dans cet exemple :
EntitySQLQuery
: l'activitéEntitySQLQuery
vous permet de récupérer des objets de la base de données selon une chaîne de requête Entity SQL. Entity SQL est un langage indépendant du stockage qui est similaire à SQL et vous permet de spécifier des requêtes selon le modèle conceptuel et les entités qui font partie du modèle ou du domaine. Pour plus d'informations sur le sujet suivant le langage Entity SQL, consultez Langage Entity SQL.EntityLinqQuery
: cette activité vous permet de récupérer des objets de la base de données selon une requête LINQ ou un prédicat.EntityAdd
: l'activitéEntityAdd
vous permet d'ajouter une entité ou une collection d'entités à la base de données.EntityDelete
: l'activitéEntityDelete
vous permet de supprimer une entité ou une collection d'entités de la base de données.ObjectContextScope
: les activités indiquées précédemment peuvent être utilisées uniquement dans une instance d'activitéObjectContextScope
contenant. L'activitéObjectContextScope
configure la connexion à la base de données. Elle requiert une chaîne de connexion (passée ou récupérée à l'aide d'un paramètre de fichier de configuration). L'activitéObjectContextScope
facilite l'exécution d'un groupe d'opérations connexes sur les entités. Étant donné que cette portée gère une connexion active, il s'agit d'une portée de non-persistance. De plus, lorsque l'activitéObjectContextScope
s'arrête, toutes les modifications apportées aux objets récupérés à l'aide des activités d'entités dans cette portée sont automatiquement rendues persistantes dans la base de données, et aucune action explicite ou suivante n'est requise pour enregistrer les objets dans la base de données.
Utilisation des activités d'entités
Les extraits de code suivants montrent comment utiliser les activités d'entités présentées dans cet exemple.
EntitySql
L'extrait de code ci-dessous montre comment interroger tous les clients dans Londres triés par nom et comment effectuer une itération au sein de la liste de clients.
Variable<IEnumerable<Customer>> londonCustomers = new Variable<IEnumerable<Customer>>();
DelegateInArgument<Customer> iterationVariable = new DelegateInArgument<Customer>();
// create and return the workflow
return new ObjectContextScope
{
ConnectionString = new InArgument<string>(connStr),
ContainerName = "NorthwindEntities",
Variables = { londonCustomers },
Body = new Sequence
{
Activities =
{
new WriteLine { Text = "Executing query" },
// query for all customers that are in london
new EntitySqlQuery<Customer>
{
EntitySql = @"SELECT VALUE Customer
FROM NorthwindEntities.Customers AS Customer
WHERE Customer.City = 'London'
ORDER BY Customer.ContactName",
Result = londonCustomers
},
// iterate through the list of customers and display them
new ForEach<Customer>
{
Values = londonCustomers,
Body = new ActivityAction<Customer>
{
Argument = iterationVariable,
Handler = new WriteLine
{
Text = new InArgument<String>(e =>
iterationVariable.Get(e).ContactName)
}
}
}
}
}
};
EntityLinqQuery
L'extrait de code ci-dessous montre comment interroger tous les clients dans Londres et comment effectuer une itération au sein de la liste résultante de clients.
Variable<IEnumerable<Customer>> londonCustomers = new Variable<IEnumerable<Customer>>() { Name = "LondonCustomers" };
DelegateInArgument<Customer> iterationVariable = new DelegateInArgument<Customer>() { Name = "iterationVariable" };
return new ObjectContextScope
{
ConnectionString = new InArgument<string>(connStr),
ContainerName = "NorthwindEntities",
Variables = { londonCustomers },
Body = new Sequence
{
Activities =
{
// return all the customers that match with the provided Linq predicate
new EntityLinqQuery<Customer>
{
Predicate = new LambdaValue<Func<Customer, bool>>(
ctx => new Func<Customer, bool>(c => c.City.Equals("London"))),
Result = londonCustomers
},
// iterate through the list of customers and display in the console
new ForEach<Customer>
{
Values = londonCustomers,
Body = new ActivityAction<Customer>
{
Argument = iterationVariable,
Handler = new WriteLine
{
Text = new InArgument<String>(e =>
iterationVariable.Get(e).ContactName)
}
}
}
}
}
};
EntityAdd
L'extrait de code ci-dessous montre comment ajouter un enregistrement OrderDetail à un Order existant.
Variable<IEnumerable<Order>> orders = new Variable<IEnumerable<Order>>();
Variable<IEnumerable<OrderDetail>> orderDetails = new Variable<IEnumerable<OrderDetail>>();
Variable<Order> order = new Variable<Order>();
Variable<OrderDetail> orderDetail = new Variable<OrderDetail>();
return new ObjectContextScope
{
Variables = { order, orders, orderDetail, orderDetails },
ContainerName = "NorthwindEntities",
ConnectionString = new InArgument<string>(connStr),
Body = new Sequence
{
Activities =
{
// get the order where we want to add the detail
new EntitySqlQuery<Order>
{
EntitySql =
@"SELECT VALUE [Order]
FROM NorthwindEntities.Orders as [Order]
WHERE Order.OrderID == 10249",
Result = orders
},
// store the order in a variable
new Assign<Order>
{
To = new OutArgument<Order>(order),
Value = new InArgument<Order>(c => orders.Get(c).First<Order>())
},
// add the detail to the order
new EntityAdd<OrderDetail>
{
Entity = new InArgument<OrderDetail>(c =>
new OrderDetail {
OrderID=10249, ProductID=11,
Quantity=1, UnitPrice = 15,
Discount = 0, Order = order.Get(c) })
}
}
}
};
EntityDelete
L'extrait de code ci-dessous montre comment supprimer un enregistrement OrderDetail existant dans un Order (s'il existe).
Variable<IEnumerable<OrderDetail>> orderDetails = new Variable<IEnumerable<OrderDetail>>();
return new ObjectContextScope
{
Variables = { orderDetails },
ConnectionString = new InArgument<string>(connStr),
ContainerName = "NorthwindEntities",
Body = new Sequence
{
Activities =
{
// find the entitiy to be deleted (order detail for product 11 in order 10249)
new EntitySqlQuery<OrderDetail>
{
EntitySql = @"SELECT VALUE OrderDetail
FROM NorthwindEntities.OrderDetails as OrderDetail
WHERE OrderDetail.OrderID == 10249
AND OrderDetail.ProductID == 11",
Result = orderDetails
},
// if the order detail is found, delete it, otherwise, display a message
new If
{
Condition = new InArgument<bool>(c=>orderDetails.Get(c).Count() > 0),
Then = new Sequence
{
Activities =
{
new EntityDelete<OrderDetail>
{
Entity = new InArgument<OrderDetail>(c =>
orderDetails.Get(c).First<OrderDetail>())
},
}
},
Else = new WriteLine { Text = "Order Detail for Deleting not found" }
}
}
}
};
Pour utiliser cet exemple
Vous devez créer la base de données Northwind
dans votre instance SQL Server Express locale avant d'exécuter cet exemple.
Pour configurer la base de données Northwind
Ouvrez une invite de commandes.
Dans la nouvelle fenêtre d'invite de commandes, accédez au dossier EntityActivities\CS.
Tapez setup.cmd et appuyez sur ENTRÉE.
Pour exécuter l'exemple
À l'aide de Visual Studio 2010, ouvrez le fichier solution EntityActivities.sln.
Pour générer la solution, appuyez sur F6.
Pour exécuter la solution, appuyez sur CTRL+F5.
Après avoir exécuté cet exemple, vous pouvez supprimer la base de données Northwind
.
Pour désinstaller la base de données Northwind
Ouvrez une invite de commandes.
Dans la nouvelle fenêtre d'invite de commandes, accédez au dossier EntityActivities\CS.
Tapez cleanup.cmd et appuyez sur ENTRÉE.
Remarque : |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\EntityActivities
|