dotConnect for Salesforce Documentation
In This Topic
    Entity Framework Support
    In This Topic

    The latest ADO.NET evolution focuses on raising the level of abstraction from the logical (relational) level to the conceptual (entity) level. For this purpose Microsoft introduces the Entity Framework, designed to simplify data - object conversion and embed data access queries into program code.

    dotConnect for Salesforce fully supports ADO.NET Entity Framework, including Entity Framework Core.

    The article consists of the following sections:

    What is ADO.NET Entity Framework?

    The Entity Framework is a set of technologies in ADO.NET that support development of data-oriented software applications. The Entity Framework is designed to enable developers to create data access applications by programming against a conceptual application model instead of programming directly against a relational storage schema. The goal is to decrease the amount of code and maintenance required for data-oriented applications. Entity Framework applications provide the following benefits:

    Entity Framework Support Key Features

    Using the Entity Data Provider

    dotConnect for Salesforce allows using it in Entity Framework models in various ways. You can use our provider with standard Visual Studio Entity Framework tools, in the same way as SqlClient.

    For example, you can create an Entity Framework model, using database-first approach (for Entity Framework v1 - v6) in the following way:

    1. Open your project.
    2. Add new item ADO.NET Entity Data Model to your project and specify its name.
    3. Choose Generate from database.
    4. Choose the dotConnect you use as data provider and specify the connection string.
    5. Select tables that are actually used in your project and click Generate to finish the process. If the selected tables contain foreign keys, they will be reflected in the generated models as well.
    6. Specify a name for the model namespace. Note that this name should be different from the database (schema) name.

    dotConnect for Salesforce also provides advanced ORM designer and code generation tool - Entity Developer. It allows creating Entity Framework v1 and Entity Framework Core models using database-first, model-first, or mixed approaches and generating code for them.

    For your convenience there is a brief Entity Framework Tutorial that you can use to get acquainted with the technology.

    dotConnect for Salesforce also supports Visual Studio LightSwitch, so you can develop LightSwitch applications with our provider.

    Using the Entity Data Provider with Entity Framework v6

    Since there are no global Entity Framework provider registration for Entity Framework v6, you should register our provider manually in the config file of your project. For this you should add the following line:

    <provider invariantName="Devart.Data.Salesforce" type="Devart.Data.Salesforce.Entity.SalesforceEntityProviderServices, 
    Devart.Data.Salesforce.Entity.EF6, Version=2.4.247.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
    

    to the entityFramework -> providers section.

    <entityFramework>
        <providers>
          <provider invariantName="Devart.Data.Salesforce" type="Devart.Data.Salesforce.Entity.SalesforceEntityProviderServices, 
          Devart.Data.Salesforce.Entity.EF6, Version=2.4.247.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
        </providers>
    </entityFramework>
    

    Note: replace 2.4.247.0 with the actual assembly version.

    If it suits for your project, you may omit the exact assembly version:

    <entityFramework>
        <providers>
            <provider invariantName="Devart.Data.Salesforce" type="Devart.Data.Salesforce.Entity.SalesforceEntityProviderServices, Devart.Data.Salesforce.Entity.EF6" />
        </providers>
    </entityFramework>
    

    This section appears in the project config file only after you add the NuGet EntityFramework package either explicitly, by executing the "install-package EntityFramework" command, or implicitly, by adding an Entity Framework v6 model for SQL Server via EDM Wizard.

    Using the Entity Data Provider with Entity Framework Core

    dotConnect for Salesforce currently supports Entity Framework Core. Entity Framework Core is supported only for the Full .NET Framework platform of version 4.5.1 and higher.

    Database-First via Package Manager Console and the Scaffold-DbContext command is supported.

    In order to use Entity Framework Core for Full .NET Framework, you need Visual Studio 2013 or higher.

    In order to register an Entity Framework provider and set a connection string, you need to override the OnConfiguring method of your DbContext class descendant.

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
      optionsBuilder.UseSalesforce(@"Server=login.salesforce.com;User Id= [email protected];Password=mypassword;Security Token=qweASDzcx1234567890rtyui;");
    }
    
    
    Protected Overrides Sub OnConfiguring(optionsBuilder As DbContextOptionsBuilder)
      optionsBuilder.UseSalesforce("Server=login.salesforce.com;User Id= [email protected];Password=mypassword;Security Token=qweASDzcx1234567890rtyui;")
    End Sub
    
    

    The mapping supported by Entity Framework Core is described in details in the corresponding section of Entity Framework documentation. If you plan to support several data sources for one base Entity Framework model, that is mapped to tables and columns named differently in different data sources, you can use special provider-specific extension methods in fluent mapping in order to support specific mapping for each data source simultaneously. dotConnect for Salesforce provides the following extension methods:

    Deploying an Entity Framework Project

    When deploying Entity Framework projects, it is necessary to:

    1. Check if the required assemblies Devat.Data.dll, Devart.Data.Salesforce.dll, and Devart.Data.Salesforce.Entity.EF<Version>.dll are available for your application. The <Version> here is the version of Entity Framework used in your application. For Entity Framework v1 the assembly is called Devart.Data.Salesforce.Entity.EF1.dll "1", for Entity Framework v4 and v5 it is Devart.Data.Salesforce.Entity.EF4.dll, for Entity Framework v6 it is Devart.Data.Salesforce.Entity.EF6.dll. For Entity Framework Core it is Devart.Data.Salesforce.Entity.EFCore.dll. The assembly should reside in the application's folder or in GAC.

    2. For Entity Framework v1 - v6, you need to inform your environment about the provider factory existence (add the entry to the DbProviderFactories section as it is described above).
    <system.data>
      <DbProviderFactories>
        <remove invariant="Devart.Data.Salesforce" />
        <add name="dotConnect for Salesforce" invariant="Devart.Data.Salesforce"
         description="Devart dotConnect for Salesforce"
         type="Devart.Data.Salesforce.SalesforceProviderFactory, Devart.Data.Salesforce,
           Version=2.4.247.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
      </DbProviderFactories>
    </system.data>
    

    Replace 2.4.247.0 here with your actual version.

    You can find the assembly in the Entity folder in the provider installation folder, in the subfolder, corresponding to the Entity Framework version necessary.

    If you are registering the provider in the machine.config file, please take into account the Entity Framework version. Entity Framework v1 - specific applications require an entry in the .NET Framework 2.0 configuration file, and Entity Framework v4 and later - specific applications should be registered in the .NET Framework 4.0 configuration file. For Entity Framework Core there is no need to register the provider in the machine.config file.

    You can also read Micrsoft's Deployment Considerations on ADO.NET Entity Framework.

    Limitations

    By Microsoft design, DbContext.SaveChanges() should work within a distributed transaction, but it is not supported by API of Salesforce.com or Database.com. That's why SaveChanges() will submit all DML operations (till the failed one, if any).

    Migration between ADO.NET Entity Data Model (*.edmx) and Devart Entity Model (*.edml)

    To migrate your ADO.NET Entity Data Model to Devart Entity Model, change the extension of the model file to edml (edmx -> edml), set the Build Action property of your model to "DevartEntityDeploy", and Custom Tool to "DevartEfGenerator". After that the model can be edited with the Devart Entity Developer.

    To migrate your Devart Entity Model to ADO.NET Entity Data Model, change the model file extension (edml -> edmx), set the Build Action property of your model to "EntityDeploy", and Custom Tool to "EntityModelCodeGenerator". After that the model can be edited with Entity Designer.

    Both *.edml and *.edmx can be opened and edited manually using XML Editor.

    See Also

    Entity Framework Tutorial | http://blog.devart.com/tag/entity-framework