数据库/对象映射
这是一个初学者的问题,但它令我感到沮丧......顺便说一句,我使用的是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。这是真的?如果是这样,我宁愿不使用它,因为我不想在任何地方安装它。
嗨,我只是在寻找一些想法/见解/建议/等。所以如果可以的话,请帮助我。
谢谢。
LINQ2SQL
是1对1关系映射的理想选择。也就是说,对象的属性在数据库中作为列被持久化。这似乎是你的情况。
为LINQ2SQL
的本机提供自然是SQL Server
但现在有第三方提供商Oracle
,MySql
和PostGreSQL
。
使用LINQ2SQL
与SQL Server
意味着您只需要在程序可寻址的位置使用数据库实例。 SQL Server
本身只需要安装在该位置。
您可以随时序列化对象到XML文件,然后反序列化它们,当你想让他们回来。
我知道你说你想要一个数据库,但我不知道如何在没有安装数据库的情况下拥有数据库。
Entity Framework与SQL Server Express会满足您的需求。 EF可能会过量,但SQLServer Express可以很容易地由应用程序安装程序安装在本地计算机上,并提供比访问更丰富的数据库功能集。
您可能还想看看SQLLite,这是一个嵌入式数据库,不需要安装,只需分发几个库。
没有它的不必要,你可以使用sql server for linq to sql,你也可以在你的项目中使用add >> newItem >> localdatabse。你可以使用linq to sql。
我会推荐使用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很有趣...试一试!
这些答案都可以帮助你? – Sorax 2010-12-23 01:19:40