Linq to SQL - сопоставление на основе атрибутов - невозможно создать экземпляр нового объекта без аргументов

Я хочу расширить класс Linq DataContext для реализации ORM. Сейчас моя модель выглядит так:

public class Trial : DataContext
{
    public Trial(string connectionString) : base(connectionString) { }

    [Column(DbType = "System.Guid", IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)]
    public Guid TrialID { get; set; }

    //...
}

Однако, когда я пытаюсь создать экземпляр нового объекта Trial, чтобы вставить его в базу данных, я получаю сообщение об ошибке с жалобой на то, что у Trial нет конструктора, который принимает 0 аргументов. Когда я пытаюсь создать такой конструктор, VS жалуется, что у DataContext нет конструктора, который принимает 0 аргументов.

Я что-то упустил? Как отделить контекст данных от определения модели?

(Впервые использую Linq!)

Заранее спасибо, Макс.


person Max    schedule 28.08.2012    source источник
comment
Классы сущностей не должны наследовать DataContext.   -  person SLaks    schedule 28.08.2012


Ответы (1)


Ваш контекст данных, представляющий представление базы данных, должен наследовать от DataContext. Он должен открывать таблицы, где T - это объекты (строки), которые вы хотите добавить. Попробуйте создать модель из базы данных с помощью конструктора или SQLMetal и внимательно посмотрите на сгенерированный код, чтобы увидеть, что происходит.

person Jim Wooley    schedule 28.08.2012
comment
Спасибо - это дало много полезной информации. Способ добиться того, что я пытался сделать, состоял в том, чтобы иметь один класс под названием TrialDataContext, унаследованный от linq dataContext, предоставляющий соответствующие конструкторы и доступ к объекту linq Table ‹Trial›, и второй класс под названием Trial, который определял свойства, получатели и сеттеры и атрибуты столбцов. - person Max; 30.08.2012