2010-12-22 276 views
0

这是一个初学者的问题,但它令我感到沮丧......顺便说一句,我使用的是C#。数据库/对象映射

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

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

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

说我有这些类。我也想要一个数据库,其中包含COLUMNS“name”“perimeter”“radius”等的“Polygon”和“Circle”表。我想要一个简单的方法将类实例保存到数据库中,或者拉一个类实例脱离数据库。

我以前一直在使用我的数据库的东西,我不介意使用MS Access,但我宁愿如果没有什么比.NET需要安装。

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

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

谢谢。

+0

这些答案都可以帮助你? – Sorax 2010-12-23 01:19:40

回答

1

LINQ2SQL是1对1关系映射的理想选择。也就是说,对象的属性在数据库中作为列被持久化。这似乎是你的情况。

LINQ2SQL的本机提供自然是SQL Server但现在有第三方提供商OracleMySqlPostGreSQL

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

0

您可以随时序列化对象到XML文件,然后反序列化它们,当你想让他们回来。

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

2

Entity FrameworkSQL Server Express会满足您的需求。 EF可能会过量,但SQLServer Express可以很容易地由应用程序安装程序安装在本地计算机上,并提供比访问更丰富的数据库功能集。

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

1

没有它的不必要,你可以使用sql server for linq to sql,你也可以在你的项目中使用add >> newItem >> localdatabse。你可以使用linq to sql。

2

我会推荐使用SQL CE 4。0(公开测试版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为它工作

<的ConnectionStrings> <添加名称连接字符串=“ShapeDbContext”connectionString =“Data Source = | DataDirectory | \ Database.sdf”providerName =“System.Data.SqlServerCe.4.0”/>
</connectionStrings>

一个主要的缺点是你不能更新现有的数据库 - 你必须手动完成 - 但是这应该与EF Code First的最终版本一起修复... 1月的某处希望... 一些majar加:简单的东西不需要太多的代码,你仍然可以深入挖掘,Linq很有趣,EF Code First很有趣...试一试!