2016-11-28 95 views
2

我试图在Ubuntu /单声道运行SQLite(版本3.11)EF6代码第一。SQL逻辑错误或缺少数据库没有这样的功能:last_rows_affected

的Program.cs

static void Main(string[] args) 
    { 
     var db = new Context(); 
     var user = new User() { Nome = "Teste"}; 

     db.User.Add(user); 

     db.SaveChanges(); 

    } 

Context.cs:

public class Context : DbContext 
{ 
    public Context():base("Context") 
    { 
     Database.SetInitializer<Context>(new CreateDatabaseIfNotExists<Context>()); 
    } 
    public DbSet<User> User { get; set; } 
} 

User.cs:

[Table("User")] 
public class User 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Nome { get; set; } 
} 

一旦进入db.SaveChanges(),它会引发以下异常:

System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.Entity.Core.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SQLite.SQLiteException: SQL logic error or missing database 
no such function: last_rows_affected 
    at System.Data.SQLite.SQLite3.Prepare (System.Data.SQLite.SQLiteConnection cnn, System.String strSql, System.Data.SQLite.SQLiteStatement previous, System.UInt32 timeoutMS, System.String& strRemain) [0x0051b] in <2502d764dcbe41f1ad84e79b77538a55>:0 
    at System.Data.SQLite.SQLiteCommand.BuildNextCommand() [0x0007c] in <2502d764dcbe41f1ad84e79b77538a55>:0 
    --- End of inner exception stack trace --- 
    at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() [0x00080] in <ba0120930fe443a3b992bc3dba4c985a>:0 
    at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.<Update>b__2 (System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator ut) [0x00000] in <ba0120930fe443a3b992bc3dba4c985a>:0 
    at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update[T] (T noChangesResult, System.Func`2[T,TResult] updateFunction) [0x00063] in <ba0120930fe443a3b992bc3dba4c985a>:0 
    at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update() [0x00000] in <ba0120930fe443a3b992bc3dba4c985a>:0 
    at System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__d() [0x00000] in <ba0120930fe443a3b992bc3dba4c985a>:0 
    at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T] (System.Func`1[TResult] func, System.Data.Entity.Infrastructure.IDbExecutionStrategy executionStrategy, System.Boolean startLocalTransaction, System.Boolean releaseConnectionOnSuccess) [0x00064] in <ba0120930fe443a3b992bc3dba4c985a>:0 
    --- End of inner exception stack trace --- 

有谁知道为什么发生这种情况?

UPDATE

我设法找出发生了什么事情。它看起来像创建的数据库是只读的。我所要做的只是改变它的权限,它的工作!

+0

它未实现的,我认为,不能肯定,虽然自动生成的SQL代码隐藏功能......看看这个:http://stackoverflow.com /问题/ 20460357 /问题-使用实体框架-6和 - 源码 –

回答

2

我们设法解决了这个问题!

我们所做的是下载完整的SQLite源代码(sqlite-netFx-full-source-1.0.104.0.zip),然后他们重新编译SQLite.csproj和EF6.csproj以使用以下命令不使用InteropDll并指定它们平台:

xbuild /p:Configuration=Release /p:UseInteropDll=false /p:UseSqliteStandard=true System.Data.SQLite/System.Data.SQLite.2010.csproj 


xbuild /p:Configuration=Release System.Data.SQLite.Linq/System.Data.SQLite.EF6.2010.csproj /p:Platform=x64 

并包括项目中的两个dll,以及实体的dll。

然后我们更新了的app.config:

<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </configSections> 
    <connectionStrings> 
    <add name="Context" connectionString="data source=teste.s3db;" providerName="System.Data.SQLite.EF6" /> 
    </connectionStrings> 

<system.data> 
    <DbProviderFactories> 
     <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, Version=1.0.104.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> 
    </DbProviderFactories> 
    </system.data>  
    <entityFramework> 
    <providers> 
     <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.104.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> 
    </providers> 
    </entityFramework> 
</configuration> 
相关问题