Отображение базы данных / объекта - PullRequest
0 голосов
/ 22 декабря 2010

Это вопрос новичка, но он меня расстраивает ... Кстати, я использую C #.

Я бы хотел создать несколько классов, каждый со своими свойствами и методами. Я также хотел бы иметь базу данных для хранения определенных экземпляров этих классов на случай, если мне когда-нибудь понадобится посмотреть их снова. Так, например ...

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

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

Скажи, что у меня есть эти классы. Мне также нужна база данных, в которой есть ТАБЛИЦЫ "Полигон" и "Круг" с именем КОЛОННЫ "" периметр "," радиус "и т. Д. И я хочу простой способ сохранить экземпляр класса в базе данных или извлечь экземпляр класса вне базы данных.

Ранее я использовал MS Access для своей базы данных, которую я не возражаю использовать, но я бы предпочел, чтобы не было установлено ничего, кроме .NET.

Я немного исследовал онлайн, но я хотел бы получить некоторые мнения здесь. Я посмотрел на Linq-to-Sql, но, похоже, вам нужен Sql-Server. Это правда? Если это так, я бы предпочел не использовать его, потому что не хочу, чтобы он был установлен везде.

Anway, я просто ловлю некоторые идеи / идеи / предложения / и т.д. поэтому, пожалуйста, помогите мне, если можете.

Спасибо.

Ответы [ 6 ]

2 голосов
/ 24 декабря 2010

Я бы рекомендовал сначала использовать 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, чтобы она работала


Одним из основных недостатков является то, что вы не можете обновить существующую базу данных - вам придется делать это вручную - однако это должно быть исправлено в окончательном выпуске EF Code First ... надеюсь, где-то в январе ... Некоторые важные плюсы: не нужно много кода для простых вещей, вы все равно можете копать глубже, Linq - это весело, EF Code First - это весело ... Дайте ему попробовать!

2 голосов
/ 22 декабря 2010

Entity Framework с SQL Server Express будет соответствовать вашим потребностям.EF может быть излишним, но SQLServer Express может быть легко установлен вашим установщиком приложений на локальном компьютере и предоставляет гораздо более богатый набор функций БД, чем доступ.

Возможно, вы также захотите взглянуть на SQLLite , которая является встроенной базой данных, которая не требует установки, только распространение еще нескольких библиотек.

1 голос
/ 23 декабря 2010

Нет, не обязательно, чтобы у вас был сервер SQL для linq to sql, вы также можете использовать add >> newItem >> localdatabse в вашем проекте.

1 голос
/ 22 декабря 2010

Я никогда не использовал его сам, но я знаю, что NHibernate делает то, что вы просите: http://www.nhibernate.com/

1 голос
/ 22 декабря 2010

LINQ2SQL идеально подходит для реляционных сопоставлений объектов 1: 1. То есть, когда свойства объекта сохраняются в виде столбцов в базе данных. Который кажется твоей ситуацией.

Собственный провайдер для LINQ2SQL, естественно, предназначен для SQL Server, но теперь есть сторонние провайдеры для Oracle, MySql и PostGreSQL.

Использование LINQ2SQL с SQL Server означает, что вам просто нужен экземпляр базы данных в месте, адресуемом вашей программой. SQL Server сам должен быть установлен только в этом месте.

0 голосов
/ 22 декабря 2010

Вы всегда можете сериализовать объекты в XML-файлы, а затем десериализовать их, когда хотите вернуть их.

Я знаю, что вы сказали, что вам нужна база данных, но я не уверен, как вы можете иметь базу данных без ее установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...