Member 13809843 Ответов: 1

Таблица не принимает внешний ключ


s_reg,s_don-это две таблицы в моей базе данных reg_id-это первичный ключ s_reg, а don_id-это s_don
я соединил две таблицы, используя reg_id обеих таблиц
но в таблице s_don столбец reg_id принимает только ноль и не показывает фактический reg_id s_reg

Что я уже пробовал:

protected void Button1_Click(object sender, EventArgs e)
{
    using (studentDataContext dt = new studentDataContext())
    {
        var log = (from s in db.s_dons
                   join m in db.s_regs on s.reg_id equals m.reg_id
                   select new
                   {
                       s,m
                   }).FirstOrDefault();
        try
        {
            s_reg reg = new s_reg();
            s_don ureg = new s_don();
            ureg.dtype = DropDownList2.SelectedItem.Text;
            ureg.dtitle = DropDownList1.SelectedItem.Text;
            ureg.dnmame = TextBox1.Text;
            ureg.ddate = TextBox2.Text;
            ureg.demail = TextBox5.Text;
            ureg.dmob = TextBox6.Text;
            ureg.dadd = TextBox7.Text;
            ureg.ddepart = ddlTest.SelectedItem.Text;
            ureg.damt = TextBox3.Text;
            ureg.dcom = TextBox4.Text;
            dt.s_dons.InsertOnSubmit(ureg);
            dt.SubmitChanges();


            var frps = dt.s_dons.Where(w => w.dnmame == TextBox1.Text);//update column
            foreach (var ti in frps)
            {
                ureg.reg_id = reg.reg_id;
                dt.SubmitChanges();
            }

            /*reg.smobile = TextBox6.Text;
            dt.s_regs.InsertOnSubmit(reg);
            dt.SubmitChanges();
            Response.Write("<script>alert('Submited successfuly');</script>");
            */

        }
        catch (Exception ex)
        {
            Response.Write("Error:" + ex.Message);
        }
    }
     }


s_reg:
CREATE TABLE [dbo].[s_reg](
[reg_id] [int] IDENTITY(2000,1) NOT NULL,
[pass_id] [int] NULL,
[sname] [nvarchar](50) NULL,
[smobile] [nvarchar](50) NULL,
[semail] [nvarchar](50) NULL,
[sdept] [nvarchar](50) NULL,
[scateg] [nvarchar](50) NULL,
[susnm] [nvarchar](50) NULL,
[spass] [nvarchar](50) NULL,
CONSTRAINT [PK_s_reg] PRIMARY KEY CLUSTERED
(
[reg_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

s_log:
CREATE TABLE [dbo].[s_log](
[log_id] [int] IDENTITY(1000,1) NOT NULL,
[reg_id] [int] NULL,
[susnm] [nvarchar](50) NULL,
[spass] [nvarchar](50) NULL,
CONSTRAINT [PK_s_log] PRIMARY KEY CLUSTERED
(
[log_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Wendelius

Чтобы понять, почему таблица отклоняет значение внешнего ключа, следует разнести инструкции CREATE TABLE

Member 13809843

s_reg:
Создайте таблицу [dbo].[s_reg](
[reg_id] [int] IDENTITY(2000,1) NOT NULL,
[pass_id] [инт] нуль,
[sname] [nvarchar](50) NULL,
[smobile] [nvarchar](50) NULL,
[semail] [nvarchar](50) NULL,
[sdept] [nvarchar](50) NULL,
[scateg] [nvarchar](50) NULL,
[susnm] [nvarchar](50) NULL,
[Спасс] [нварчар](50) ноль,
Ограничение [PK_s_reg] первичный ключ КЛАСТЕРИЗОВАН
(
[reg_id] АСК
)С (КАК = ВЫКЛ, STATISTICS_NORECOMPUTE = OFF, ТО ЗНАЧЕНИЕ IGNORE_DUP_KEY = OFF, ТО ПАРАМЕТРЫ ALLOW_ROW_LOCKS = ON, ТО ALLOW_PAGE_LOCKS ИНСТРУКЦИИ =) НА [ОСНОВНОЙ]
) НА [ПЕРВИЧНОМ]


s_log:
Создайте таблицу [dbo].[s_log](
[log_id] [int] IDENTITY(1000,1) NOT NULL,
[reg_id] [int] NULL,
[susnm] [nvarchar](50) NULL,
[Спасс] [нварчар](50) ноль,
Ограничение [PK_s_log] первичный ключ КЛАСТЕРИЗОВАН
(
[log_id] АСК
)С (КАК = ВЫКЛ, STATISTICS_NORECOMPUTE = OFF, ТО ЗНАЧЕНИЕ IGNORE_DUP_KEY = OFF, ТО ПАРАМЕТРЫ ALLOW_ROW_LOCKS = ON, ТО ALLOW_PAGE_LOCKS ИНСТРУКЦИИ =) НА [ОСНОВНОЙ]
) НА [ПЕРВИЧНОМ]

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

1 Ответов

Рейтинг:
0

Wendelius

Насколько я могу судить, reg_id на s_log не определяется как внешний ключ. Скорее всего, из-за этого для вашей модели не были созданы надлежащие атрибуты. Другое дело, если я правильно помню, s_reg должен иметь коллекцию, содержащую дочерние сущности, чтобы при вставке можно было использовать вновь сгенерированный ключ.

Поэтому попробуйте определить внешний ключ в базе данных и обновить модель. Также взгляните на Объектная модель LINQ to SQL | Microsoft Docs[^]