Oracle
introduction
L'équipe Oracle .NET a annoncé son intention de publier un fournisseur tiers pour EF Core 2.0 environ au troisième trimestre de 2018. Pour plus d'informations, consultez leur déclaration d'orientation pour .NET Core et Entity Framework Core .
- L’équipe EF a produit un exemple de fournisseur EF Core pour les bases de données Oracle.
- L'objectif du projet n'est pas de produire un fournisseur EF Core appartenant à Microsoft, mais de nous aider à identifier les lacunes dans les fonctionnalités relationnelles et de base d'EF Core que nous devons résoudre afin de mieux prendre en charge Oracle et de relancer le développement d'autres logiciels Oracle. fournisseurs pour EF Core par Oracle ou des tiers.
Fournisseur de fête
Devart.Data.Oracle.EFCore
est un fournisseur de base de données tiers et permet à Entity Framework Core d'être utilisé avec une base de données Oracle. Pour utiliser ce fournisseur de base de données, la première étape consiste à installer le package Devart.Data.Oracle.EFCore NuGet. Considérons un modèle simple qui contient trois entités.
public class Customer
{
public int CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public virtual List<Invoice> Invoices { get; set; }
}
public class Invoice
{
public int Id { get; set; }
public DateTime Date { get; set; }
public int CustomerId { get; set; }
[ForeignKey("CustomerId")]
public virtual Customer Customer { get; set; }
public virtual List<InvoiceItem> Items { get; set; }
}
public class InvoiceItem
{
public int InvoiceItemId { get; set; }
public int InvoiceId { get; set; }
public string Code { get; set; }
[ForeignKey("InvoiceId")]
public virtual Invoice Invoice { get; set; }
}
L'étape suivante consiste à créer une classe DbContext
personnalisée.
public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
public DbSet<Invoice> Invoices { get; set; }
public DbSet<InvoiceItem> InvoiceItems { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseOracle(@"User Id=Scott;Password=tiger;Data Source=Ora;");
}
}
Dans EF Core, DbContext a une méthode virtuelle appelée onConfiguring qui sera appelée en interne par EF Core. Elle transmettra également une instance d'optionsBuilder. Vous pouvez utiliser cette option pour configurer les options de DbContext.
Le optionsBuilder a la méthode UseOracle; il attend une chaîne de connexion en tant que paramètre. Une fois que vous avez un modèle, vous pouvez utiliser les migrations pour créer une base de données.
Exécutez la commande suivante dans la console du gestionnaire de package.
PM> Add-Migration Initial
Cette commande scaffold une migration pour créer le jeu initial de tables pour votre modèle. Lorsqu'il est exécuté avec succès, exécutez la commande suivante.
PM> Update-Database
Il appliquera la nouvelle migration à la base de données. Vous pouvez maintenant utiliser la base de données Oracle pour insérer, supprimer et mettre à jour des données.
using (var context = new MyContext())
{
var customer = new Customer
{
FirstName = "Elizabeth",
LastName = "Lincoln",
Address = "23 Tsawassen Blvd."
};
context.Customers.Add(customer);
context.SaveChanges();
}
Limites
L'équipe dédiée a mis en œuvre avec succès la plupart des fonctionnalités qui prennent en charge la fonctionnalité Entity Framework autant que possible pour le serveur Oracle, mais certaines limitations ne peuvent pas être surmontées.
- Oracle n'a pas d'équivalent pour les constructions SQL Server OUTER APPLY et CROSS APPLY.
- Les types définis par l'utilisateur, y compris les objets Oracle, les types de tableaux et les tables imbriquées, ne sont pas pris en charge.