2014-06-25 36 views
5

我一直在試圖讓EF 6和SQLite在WinForms應用程序中很好地玩了一個多星期。我似乎遇到了多個隨機例外 - 這導致我相信我沒有正確地做某件事。我似乎無法找到合適的設置指南或教程。SQLite + EntityFramework 6設置

我正在從Nuget直接使用SQLite 1.0.93和EF 6.1.0。

這是我的Context類。我不相信DbSet類存在問題。

public class MyDbContext: DbContext 
{   
    public MyDbContext() : base("name=dbConnection") 
    { 
     System.Data.Entity.Database.SetInitializer<MyDbContext>(null); 
    } 

    public DbSet<Object1> Objects1 { get; set; } 
    public DbSet<Object2> Objects2 { get; set; } 
    public DbSet<Object3> Objects3 { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions 
      .Remove<PluralizingTableNameConvention>(); 
    } 
} 

有了這個我也試圖用Db數據填充兩個單獨的DataGridViews。

public static BindingList<Objects1> Objects1BindingList 
    { 
     get 
     { 
      return MyDbContext.Objects1.Local.ToBindingList(); 
     } 
    } 

    public static BindingList<Objects3> Objects3BindingList 
    { 
     get { return MyDbContext.Objects3.Local.ToBindingList(); } 
    } 

    private static MyDbContext _data; 

    public static MyDbContext Data 
    { 
     get 
     { 
      return _data ?? (_data = new MyDbContext()); 
     } 
    } 

我的App.config

<connectionStrings> 
    <add name="dbConnection" 
     connectionString="Data Source=.\data.sqlite" providerName="System.Data.SQLite" /> 
    </connectionStrings> 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="System.Data.SQLite" /> 
     <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> 
    <!--  
     <remove invariant="System.Data.SQLite.EF6" /> 
     <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> 
    --> 
    </DbProviderFactories> 
    </system.data> 
    <entityFramework> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.SQLiteProviderServices, System.Data.SQLite.Linq, Version=2.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> 
    </providers> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
    <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

可能有人點我到更近的和成熟的教程或指向我一個更好的方向發展?

謝謝。

+0

也許我對類似問題的回答可以提供一些幫助: http://stackoverflow.com/questions/25089346/database-first-create-entity-framework-6-1-1-model-using-system -data-sqlite的-1-0 – TomL

回答

2

我一直在嘗試使用與asp.net mvc5和EF 6.1,至今沒有源碼,但我已經學到了一些東西,我可以建議你還是看你的app.config文件:

<connectionStrings> 
    <add name="dbConnection" 
     connectionString="Data Source=.\data.sqlite" providerName="System.Data.SQLite" /> 
    </connectionStrings> 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="System.Data.SQLite" /> 
     <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> 
    <!-- Leave this in there if you want to have EF working with your project -->  
     <remove invariant="System.Data.SQLite.EF6" /> 
     <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> 

    </DbProviderFactories> 
    </system.data> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
<providers> 
    <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.93.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> 
</providers> 
    <!-- This only works for sql server localdb edition 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
    <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> --> 
    </entityFramework> 

以上是我在我的web.config,讓我去我的項目(因爲web.config和app.config基本相同)唯一的問題是,根據http://hintdesk.com/sqlite-with-entity-framework-code-first-and-migration/你必須創建SQLite管理器插件的數據庫在Mozilla之前。

即使當我做了我仍然從這個異常「異常的類型'System.InvalidOperationException'發生在EntityFramework.dll中,但沒有在用戶代碼中處理」其他類型的異常。這真的很糟糕,但也許這可以讓你在路上。