数据库/对象映射

时间:2010-12-22 18:32:30

标签: c# database linq-to-sql object

这是一个初学者的问题,但令我感到沮丧... 顺便说一下,我正在使用C#。

我想创建一些类,每个类都有自己的属性和方法。我还希望有一个数据库来存储这些类的某些实例,以防我需要再次查看它们。所以,例如......

class Polygon
{
    String name;
    Double perimiter;
    int numSides;
    public Double GetArea()
    {
        // ...
    }
}

class Circle
{
    String name;
    Double radius;
    public void PrintName()
    {
        // ...
    }
}

说我有这些课程。我还想要一个具有TABLES“Polygon”和“Circle”的数据库,其中COLUMNS“name”“perimeter”“radius”等。我想要一种简单的方法将类实例保存到数据库中,或者拉一个类实例超出数据库。

我之前一直在使用MS Access来处理我的数据库内容,我不介意使用它,但我更希望除了.NET之外什么都不需要安装。

我一直在网上研究,但我想在这里得到一些意见。我看过Linq-to-Sql,但似乎你需要Sql-Server。这是真的?如果是这样,我真的不想使用它,因为我不想在任何地方都安装它。

Anway,我只是在寻找一些想法/见解/建议/等等。如果可以的话,请帮帮我。

感谢。

6 个答案:

答案 0 :(得分:2)

Entity Framework的{p> SQL Server Express符合您的需求。 EF可能过度,但SQLServer Express可以由应用程序安装程序在本地计算机上轻松安装,并提供比访问更丰富的数据库功能集。

您可能还想查看SQLLite,这是一个不需要安装的嵌入式数据库,只需要分发更多的库。

答案 1 :(得分:2)

我建议首先使用SQL CE 4.0(公共beta 2)和EF代码(CTP 5)

EF:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35adb688-f8a7-4d28-86b1-b6235385389d

SQL CE:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d9d933e7-9376-445e-8217-0c1e102a380e

不要让测试状态吓到你,这两种产品已经非常稳定,如果是为了一个爱好项目,或者只是学习,我会毫不犹豫。

创建/查询数据库可以像

一样简单
using System;
using System.Data.Entity;
using System.Data.Entity.Database;
using System.Linq;

namespace EFCodeFirst
{
    public class Polygon
    {
        public int ID { get; set; }
        public String Name { get; set; }
        public Double Perimiter { get; set; }
    }

    public class Circle
    {
        public int ID { get; set; }
        public String Name { get; set; }
        public Double Radius { get; set; }
    }

    public class ShapeDbContext : DbContext
    {
        public DbSet<Polygon> Polygons { get; set; }
        public DbSet<Circle> Circles { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            DbDatabase.SetInitializer(new CreateDatabaseIfNotExists<BookDbContext>());

            using(var context = new ShapeDbContext())
            {
                // creating a new object
                context.Polygons.Add(new Polygon { Name = "P1", Perimiter = 3 });
                context.Polygons.Add(new Polygon { Name = "P2", Perimiter = 2 });

                context.SaveChanges();
            }

            using(var context = new ShapeDbContext())
            {
                // creating a new object
                var polygons = context.Polygons.Where(o => o.Perimiter < 3);

                Console.WriteLine(polygons.Count());
            }
        }
    }
}

这是您需要添加到app.config以使其正常工作的连接字符串

&LT;&的ConnectionStrings GT;   &lt; add name =“ShapeDbContext”connectionString =“Data Source = | DataDirectory | \ Database.sdf”providerName =“System.Data.SqlServerCe.4.0”/&gt;

&LT; /&的ConnectionStrings GT;

一个主要的缺点是您无法更新现有数据库 - 您必须手动执行 - 但是应该使用EF Code First的最终版本来修复... ...希望在1月的某个地方...... 一些majar plusses:简单的东西不需要太多的代码,你仍然可以深入挖掘,Linq很有趣,EF Code First很有趣......试一试!

答案 2 :(得分:1)

LINQ2SQL适用于1对1对象关系映射。也就是说,对象的属性作为数据库中的列保存。这似乎是你的情况。

LINQ2SQL的原生提供者自然是SQL Server,但现在有OracleMySqlPostGreSQL的第三方提供商。

LINQ2SQLSQL Server一起使用意味着您只需要一个可由您的程序寻址的位置的数据库实例。 SQL Server本身只需要安装在该位置。

答案 3 :(得分:1)

我自己从未使用过它,但我知道NHibernate会按照你的要求行事:http://www.nhibernate.com/

答案 4 :(得分:1)

没有必要你shud有sq服务器用于linq到sql,你也可以在你的项目中使用add&gt;&gt; newItem&gt;&gt; localdatabse。你可以使用linq到它的sql。

答案 5 :(得分:0)

您始终可以将对象序列化为xml文件,然后在想要取回它们时对其进行反序列化。

我知道你说你想要一个数据库,但我不确定如何在没有安装数据库的情况下拥有数据库。