В поисках инструмента для работы с БД при помощи LINQ наткнулся на linq2db, но толи я тупой, толи документация слишком скудная, но я застрял на элементарном Insert. Ссылка на github библиотеки: https://github.com/linq2db/linq2db
Вот моя Таблица в БД:
[Table(Name = "AnimePosters")]
public class AnimePoster
{
[PrimaryKey, Column(Name = "title_id"), NotNull]
public int title_id { get; set; }
[Column(Name = "original"), NotNull]
public string original { get; set; }
[Column(Name = "preview"), NotNull]
public string preview { get; set; }
[Column(Name = "x96"), NotNull]
public string x96 { get; set; }
[Column(Name = "x48"), NotNull]
public string x48 { get; set; }
}
public class DBRatesDB : LinqToDB.Data.DataConnection
{
public DBRatesDB() : base("RatesDB") { }
public ITable<AnimePoster> AnimePoster { get { return GetTable<AnimePoster>(); } }
}
Описал сущности для таблицы. На считывание (Select) компилятор не ругается, а вот, когда я пытаюсь воспользоваться Insert как написано в ReadMe.
Пример из README.md
using (var db = new DbNorthwind())
{
db.Insert(product);
}
Как я понял, product это экземпляр класса сущности, которая определяет таблицу из БД, то есть для меня это должен быть AnimePoster, но выдаёт непонятную мне ошибку.
Может кто может помочь с этим или у вас есть свои варианты библиотек для работы с LINQ с БД Access или SQLite (любой из них). Буду очень благодарен, если к своим вариантам приложите примеры для основных запросов вроде Select|Insert|Delete|Update или ссылку на документацию, где это всё подробно расписано.
Документация библиотеки достаточно не плохая. Библиотека для обеспечения безопасности типов и выявления ошибок на этапе компиляции использует деревья выражений Expression.
В первую очередь это позволяет Вам избавиться от "магических строк" для имен объектов базы данных и предоставляет простой C# синтаксис для генерации запросов к БД.
Конкретно в Вашем примере у Вас ошибка в использовании (и да, в документации это есть). И Да Insert
в данном случае это команда которой нужно указать что вставлять не много по другому:
using (var db = new DbNorthwind())
{
AnimePoster ap = new AnimePoster(); // get animePoster
db.AnimePoster
.Value(p => p.original, () => ap.original)
.Value(p => p.preview, () => ap.preview)
.Value(p => p.x48, () => ap.x48)
.Value(p => p.x96, () => ap.x96)
.Value(p => p.title_id, () => ap.title_id)
.Insert();
}
Как верно заметил @Bulson более простым способом (если вам не нужно выбирать какие поля вставлять, а какие нет) будет просто:
using (var db = new DbNorthwind())
{
AnimePoster ap = new AnimePoster(); // get animePoster
db.Insert(ap); // Вместо db.AnimePoster.Insert(ap);
}
Или с Identity
:
using (var db = new DbNorthwind())
{
AnimePoster ap = new AnimePoster(); // get animePoster
db.InsertWithIdentity(ap);
}
Собственно под заголовком Insert там есть и более сложные и гибкие примеры и более простые. В том коде что у вас вы также можете вставить сразу несколько элементов в БД:
using (var db = new DbNorthwind())
{
var animePosters = db.AnimePoster.Select( /*Ваш Select*/x => x);
db.BulkCopy(animePosters);
}
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Видел, что некоторые Web-приложения работают с WCF-службами
Какие есть способы получить размер объекта в памяти? Можно не обязательно в рантайме (кодом)