c # linq: как отправить объект в базу данных в качестве новой записи

#c# #linq-to-sql #insert

#c# #linq-to-sql #вставить

Вопрос:

У меня есть следующий объект:

 namespace LearnLINQ1
{
    [Table(Name="testMe")]
    public class SubmitTest
    {
        [Column(Name="FirstName")]
        public string FirstName { get; set; }

        [Column(Name = "LastName")]
        public string LastName { get; set; }

        [Column(Name = "PhoneNumber")]
        public int PhoneNumber { get; set; }

        linqLayerDataContext db;
    }
}
  

И я использовал то же самое с конструктором:

 namespace LearnLINQ1
{
    [Table(Name="testMe")]
    public class SubmitTest
    {
        [Column(Name="FirstName")]
        public string FirstName { get; set; }

        [Column(Name = "LastName")]
        public string LastName { get; set; }

        [Column(Name = "PhoneNumber")]
        public int PhoneNumber { get; set; }

        linqLayerDataContext db;

        //constructor
        public SubmitTest(string first, string last, int phone, linqLayerDataContext db)
        {
            this.FirstName = first;
            this.LastName = last;
            this.PhoneNumber = phone;
            this.db = db;
        }

    }
}
  

Я использую следующий код для создания экземпляра объекта и попытки добавить его в базу данных в качестве новой записи:

 SubmitTest test = new SubmitTest { FirstName = "Jeremy", LastName = "Stafford", PhoneNumber = 23 };
db.testMes.InsertOnSubmit(test);
  

Но я получаю ошибку:

Ошибка 1 Наилучший перегруженный метод соответствует ‘System.Data.Linq.Таблица.InsertOnSubmit(LearnLINQ1.TestMe)’ имеет некоторые недопустимые аргументы C:UsersJeremyDocumentsVisual Studio 2010 ProjectsLearnLINQ1LearnLINQ1Form1.cs 42 13 LearnLINQ1

Ошибка 2 Аргумент 1: не удается преобразовать из ‘LearnLINQ1.Отправить’ в ‘LearnLINQ1.TestMe’ C:UsersJeremyDocumentsVisual Studio 2010 Projects LearnLINQ1LearnLINQ1Form1.cs 42 39 LearnLINQ1

Я не уверен, что в определении класса чего-то не хватает… концепция вроде как новая. Может кто-нибудь указать мне правильное направление?

================================ ОБНОВЛЕНИЕ: Хорошо, я внес некоторые изменения

класс customer:

 namespace LearnLINQ1
{

    public class Customer
    {
        [Table(Name = "testMe")]
        public class SubmitTest
        {
            [Column(Name = "FirstName")]
            public string FirstName { get; set; }

            [Column(Name = "LastName")]
            public string LastName { get; set; }

            [Column(Name = "PhoneNumber")]
            public int PhoneNumber { get; set; }
        }
    }
}
  

И тестовый код:

 namespace LearnLINQ1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            linqTestDataContext db = new linqTestDataContext();

            Table<Customer> Customers = db.GetTable<Customer>();
            var cus = new Customer { FirstName = "Jeremy", Lastname = "Stafford", Age = 31 };
            db.Customers.InsertOnSubmit(cus);

            db.SubmitChanges();
        }
    }
}
  

Теперь проблема с классом customer. выдает следующую ошибку:

Ошибка 1 Отсутствует частичный модификатор в объявлении типа ‘LearnLINQ1.Customer’; существует другое частичное объявление этого типа C:UsersJeremyDocumentsVisual Studio 2010 Projects LearnLINQ1LearnLINQ1Customer.cs 11 18 LearnLINQ1

Комментарии:

1. В контексте данных должна быть другая коллекция — что-то вроде SubmitTests . По сути, вы пытаетесь сохранить SubmitTest объект в коллекцию TestMe объектов — это просто не работает…

2. Вы могли бы также использовать предоставленный вами конструктор: SubmitTest test = new SubmitTest («Джереми», «Стаффорд», 23, db);

3. нм, разорвал его и перезапустил. были некоторые конфликты, вызванные тем фактом, что я не понимал, что эти объекты были выведены из контекста данных.

Ответ №1:

LearnLINQ1.TestMe — это объект, который вам нужно создать, а не LearnLINQ1.Отправить

Комментарии:

1. как мне создать экземпляр объекта TestMe из класса с именем TestMe, который не существует?