2010-12-22 275 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很有趣...試一試!