Я уже работал с linq в прошлом и знаю, как получить доступ к базе данных с помощью SqlConnection и SqlCommand.Сегодня я хотел поработать с LinqToSql и посмотреть, смогу ли я облегчить чтение и запись в базу данных.Я сделал это Прохождение.
Вот код для класса клиента (я немного его изменил, но он все еще отлично работает):
[Table(Name = "Customers")]
class Customer
{
[Column(IsPrimaryKey = true)]
public string CustomerID { get; set; }
[Column]
public string City { get; set; }
}
И код от Main:
class Program
{
static void Main(string[] args)
{
DataContext db = new DataContext(@"Data Source=(local)\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa;Password=xxx");
Table<Customer> customers = db.GetTable<Customer>();
IQueryable query = from cust in customers
//where cust.City == "London"
select cust;
foreach (Customer customer in query)
Console.WriteLine("ID:{0}; City={1}", customer.CustomerID, customer.City);
Console.ReadKey();
}
}
Это сработало, и я счастлив, потому что это делает доступ к базе данных намного проще для меня.Но есть еще пара вещей, которые меня беспокоят:
- Кажется, что для каждого столбца, который я хочу включить, мне нужно создать новое свойство в классе Customer и добавить[Столбец] над ним.
- Мне нужно создать новый класс для каждой таблицы, из которой я хочу читать (например, «Клиенты», «Заказы и поставщики» в БД «Борей»).
Прежде всего, это, кажется, довольно много ненужной и повторяющейся работы.Я что-то здесь не так делаю?
Также я хочу, чтобы пользователь вводил имя базы данных и таблицу.Это означает, что я еще не знаю, какую базу данных он выберет, и еще не знаю структуру таблицы.Я пока не могу создать класс, который должен представлять таблицу.
Это означает, что мне нужно:
- Создать тип / класс / объект динамически.Я не могу использовать
Table<Customer> customers = db.GetTable<Customer>()
, потому что я еще не знаю тип.Типом будет динамически создаваемый класс. - Отметьте тип / класс / объект как таблицу с помощью
[Table(Name="xxx")]
. - Считайте столбцы из SqlTable и создайте для каждого столбца свойство ипометьте его [Столбец].
- После того, как я закончу с этим, я могу получить таблицу с
Table<T> table = db.GetTable<T>()
, выполнить запрос и отобразить datarows.
Мой второй (и более важный) вопрос: как я могу это сделать?У кого-нибудь есть примеры кода или ссылки для обмена?Или этот подход неправильный?