Sqlite C# ORM 代码生成的任何建议 [关闭]

Posted

技术标签:

【中文标题】Sqlite C# ORM 代码生成的任何建议 [关闭]【英文标题】:Any recommendations for Sqlite C# ORM code generation [closed] 【发布时间】:2009-12-19 22:28:23 【问题描述】:

谁能推荐一个Sqlite C# ORM代码生成工具。

我找到了 Habanero 框架,有没有关于它的 cmets?

谢谢

更新

在这种情况下,我选择了 Subsonic。为了帮助其他人,这里是一个创建类并同时使用 Subsonic 和 Sqlite 的“基本”示例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
using SubSonic;
using SubSonic.Schema;
using SubSonic.Repository;
using SubSonic.DataProviders;

namespace SubsonicSqliteTest

    public class User
    
        public User()
        
            ID = Guid.NewGuid();

            // Set Defaults
            FirstName = String.Empty;
            LastName = String.Empty;
            Username = String.Empty;
            Password = String.Empty;
            IsAdministrator = 0;
        

        public Guid ID  get; set; 
        public string FirstName  get; set; 
        public string LastName  get; set; 
        public string Username  get; set; 
        public string Password  get; set; 
        public int IsAdministrator  get; set; 
        public DateTime? CreatedDate  get; set; 
        public DateTime? LastUpdatedDate  get; set; 

        public static User Get(Guid id)
        
            string databasePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Application.ExecutablePath), "Database.db");
            IDataProvider provider = ProviderFactory.GetProvider("Data Source=" + databasePath + ";Version=3;New=True;Pooling=True;Max Pool Size=1;", "System.Data.SQLite");
            var repository = new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations);
            var users = from user in repository.All<User>()
                        where user.ID == id
                        select user;

            foreach (var user in users)
            
                return user;
            

            return null;
        

        public User Save()
        
            string databasePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Application.ExecutablePath), "Database.db");
            IDataProvider provider = ProviderFactory.GetProvider("Data Source=" + databasePath + ";Version=3;New=True;Pooling=True;Max Pool Size=1;", "System.Data.SQLite");
            var repository = new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations);
            repository.Add(this);
            return this;
        
    

【问题讨论】:

Habanero 在这种情况下对于我的要求来说看起来太大了。我们确实有自己的框架,但也太重了,实际上在这种情况下正在替换它。 【参考方案1】:

其他人已经发布了关于 NHibernate(尤其是 Fluent NHibernate)和 ADO.Net Entity Framework 的文章,它们都很棒。您可能还想查看SubSonic。如果您正在考虑使用 SQLite,那么您的数据库要求必须相当简单,并且 SubSonic's SimpleRepository option 非常易于使用。

【讨论】:

是的,我的要求非常简单,只需要一个非常轻量级的数据存储,并且宁愿尝试 sqlite 而不是访问。 SubSonic SimpleRepository 看起来非常适合小型应用程序和快速概念验证!关于如何将 SimpleRepository 连接到 Sqlite DataProvider 或如何配置 Sqlite 连接字符串的任何想法? 我将使用 Subsonic SimpleRepository,感谢您的帮助。 (我在问题中包含了一个演示 Sqlite 和 Subsonic 的基本类) 很高兴我能帮上忙。看起来你找到了连接字符串,对吧?【参考方案2】:

多个 .NET 对象关系映射器支持 SQLite。请参阅this question .NET ORM 列表:在其中提到的那些中,我知道 NHibernate 和 LightSpeed 支持 SQLite,正如实体框架通过 eWolf's answer 中提到的提供程序所做的那样。我不确定其他人。

在代码生成方面,LightSpeed 和实体框架(通过 System.Data.SQLite)包括用于导入现有 SQLite 数据库模式的工具;我不确定NHibernate。 (披露:我为制造 LightSpeed 的公司工作;不过,我尽量保证答案的真实性!)

【讨论】:

【参考方案3】:

我不知道这是否正是您要寻找的;你已经看过了吗?

http://sqlite.phxsoftware.com/

您可以将它与 ADO.NET 2.0 或 ADO.NET 3.5 实体框架一起使用。

【讨论】:

这看起来也不错,只是尝试将 SubSonic 连接到这个... 谢谢,但链接已失效【参考方案4】:

http://en.wikipedia.org/wiki/NHibernate

http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework

你也可以使用 linq to sql 魔法的东西

【讨论】:

我很确定“LINQ to SQL magic thingy”只适用于 SQL Server。 我不是...但无论如何它有点糟糕...这有帮助吗? sqlite.phxsoftware.com LINQ to SQL 仅适用于 MSSQL 服务器。但是,Entity Framework 为您提供了强大的 LINQ 提供程序,因此您可以执行基本相同的操作。 nuget.org/packages/ObjectStore.Sqlite 与 SqlLite 配合得也很好。【参考方案5】:

这是一个非常强大的ORM,生成代码友好http://www.schematrix.com

【讨论】:

以上是关于Sqlite C# ORM 代码生成的任何建议 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C#使用sqlite-net搭建简易的ORM

ORM 是不是有任何方法可以确定 SQLite 列是不是包含日期时间或布尔值?

是否有任何支持 SQLite(在 Android 上)的良好 ORM(最好是 JPA 实现)? [关闭]

支持 UPSERT 的 Android SQLite ORM? [关闭]

如何将 SQLite (SQLite.NET) 添加到我的 C# 项目中

C# 使用 Dapper 实现 SQLite 增删改查