Первичный ключ и связи с таблицами в приложении ASP.NET MVC - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть две таблицы с именами Seminari и Predbiljezbe.

Когда я создаю новую строку данных в таблице Predbiljezbe, я хочу, чтобы строка взяла первичный ключ таблицы Seminari ивставьте его в таблицу Predbiljezbe.

Надеюсь, я дал понять, помните, что, поскольку я новичок в программировании и хотел бы помочь, большое спасибо.Я прошу прощения за мой плохой английский.

Вот мой код:

Контроллер:

    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(Predbiljezbe predbiljezbePrijava)
    {
        if (ModelState.IsValid)
        {
            context.Predbiljezbes.Add(predbiljezbePrijava);
            context.SaveChanges();

            return RedirectToAction("Index");
        }
        return View(predbiljezbePrijava);
    }

Модель объекта:

public partial class SeminariEntities1 : DbContext
{
    public SeminariEntities1()
        : base("name=SeminariEntities1")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Predbiljezbe> Predbiljezbes { get; set; }
    public virtual DbSet<Seminari> Seminaris { get; set; }
}

Модель Predbiljezbe:

public partial class Predbiljezbe
{
    public int IdPredbiljezba { get; set; }
    public string Ime { get; set; }
    public string Prezime { get; set; }
    public string Datum { get; set; }
    public string Adresa { get; set; }
    public string Email { get; set; }
    public string Telefon { get; set; }
    public bool Status { get; set; }
    public Nullable<int> IdSeminara { get; set; }
    public Nullable<int> BrojPolaznika { get; set; }

    public virtual Seminari Seminari { get; set; }
}

Модель семинарии:

public partial class Seminari
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Seminari()
    {
        this.Predbiljezbes = new HashSet<Predbiljezbe>();
    }

    public int IdSeminar { get; set; }
    public string Naziv { get; set; }
    public string Opis { get; set; }
    public System.DateTime Datum { get; set; }
    public Nullable<bool> Popunjen { get; set; }
    public string Predavač { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Predbiljezbe> Predbiljezbes { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Я попробовал ваше предложение, но не смог применить решение к моей проблеме,

Возможно, произошла ошибка в том, как я установил свои таблицы и отношения между ними.

Вот мой SQL-запрос, как я установил таблицы в базе данных:

Семинар:

CREATE TABLE [dbo].[Seminari] (
[IdSeminar] INT            IDENTITY (1, 1) NOT NULL,
[Naziv]     NVARCHAR (MAX) NOT NULL,
[Opis]      NVARCHAR (MAX) NULL,
[Datum]     DATE           NOT NULL,
[Popunjen]  BIT            NOT NULL,
[Predavač]  NVARCHAR (50)  NULL,
PRIMARY KEY CLUSTERED ([IdSeminar] ASC)

);

Predbilježbe:

CREATE TABLE [dbo].[Predbiljezbe] (
[IdPredbiljezba] INT            IDENTITY (1, 1) NOT NULL,
[Ime]            NVARCHAR (MAX) NOT NULL,
[Prezime]        NVARCHAR (MAX) NOT NULL,
[Datum]          NVARCHAR (MAX) NOT NULL,
[Adresa]         NVARCHAR (MAX) NOT NULL,
[Email]          NVARCHAR (MAX) NULL,
[Telefon]        VARCHAR (MAX)  NULL,
[Status]         NVARCHAR (50)  NULL,
[BrojPolaznika]  INT            NULL,
[IdSeminara]     INT            NULL,
CONSTRAINT [PK_Predbiljezbe] PRIMARY KEY CLUSTERED ([IdPredbiljezba] ASC),
CONSTRAINT [FK_Predbiljezbe_ToTable] FOREIGN KEY ([IdSeminara]) REFERENCES [dbo].[Seminari] ([IdSeminar])

);

Еще раз, когда я хочу создать новую строку в «Predbiljezbe», этот столбец [IdSeminara] принимает значение первичного ключа [IdSeminar] из таблицы «Seminari»!

0 голосов
/ 08 декабря 2018

Я делаю это, используя двойные методы:

  1. Чтобы вставить в базу данных и вернуть Id

  2. Чтобы вставить зависимого потомка, используя вышеId

[HttpPost]
    public ActionResult Create(Predbiljezbe predbiljezbePrijava)
    {
        if (ModelState.IsValid)
        {
           //add your first obj
            context.Predbiljezbes.Add(predbiljezbePrijava);
            context.SaveChanges();

            //after saving in db its Id is automatically reflected in the object that you inserted
            if(predbiljezbePrijava.Id != 0){ 
               var seminariobj = new Seminari{ //insert your data }

               // defining parentId into child
               seminariobj.predbiljezbePrijavaId = predbiljezbePrijava.Id;

              //save child obj
               context.Seminari.Add(seminariobj);
            context.SaveChanges();


            }

            return RedirectToAction("Index");
        }
        return View(predbiljezbePrijava);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...