第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創(chuàng)建方法嘗試從表單中插入 FK 作為 ID

創(chuàng)建方法嘗試從表單中插入 FK 作為 ID

C#
qq_花開花謝_0 2023-08-13 16:08:25
我正在嘗試將新數(shù)據(jù)插入到我的一個表中,但我收到了身份插入錯誤,即使我從未真正設(shè)置過 ID。我可以用創(chuàng)可貼修復(fù)此問題,但我想了解為什么會發(fā)生這種情況以及最佳實(shí)踐是什么如果我在添加到 DbContext 之前將 Id 設(shè)置為 0,它可以正常工作,但我根本不明白我的 Id 是在哪里設(shè)置的。這是我的模型:public class Question : BaseModel{    public QuestionGroup QuestionGroup { get; set; }    public int QuestionGroupId { get; set; }    [Display(Name ="Question Text")]    public string QuestionText { get; set; }    public string Type { get; set; }}public class BaseModel{    public int Id { get; set; }    [Display(AutoGenerateField = false), JsonIgnore]    public DateTime CreatedAt { get; set; }    [Display(AutoGenerateField = false), JsonIgnore]    public DateTime UpdatedAt { get; set; }}這是我的相關(guān)控制器代碼:(如果我取消注釋將 Id 設(shè)置為 0,則可以正常工作)[HttpPost][ValidateAntiForgeryToken]public async Task<IActionResult> Create(Question question){    //question.Id = 0;    if (ModelState.IsValid)    {        _context.Add(question);        await _context.SaveChangesAsync();        return RedirectToAction("Details", "QuestionGroups", new { id =         question.QuestionGroupId });    }    await PopulateId(question.QuestionGroupId);    return View(question);}這是我的表格:<div class="col-md-4">    <form asp-action="Create" enctype="multipart/form-data">        <div asp-validation-summary="ModelOnly" class="text-danger"></div>        <input asp-for="QuestionGroupId" type="hidden"         value="@ViewBag.QuestionGroupId"/>        <div class="form-group">            <label asp-for="QuestionText" class="control-label"></label>            <input asp-for="QuestionText" class="form-control" />            <span asp-validation-for="QuestionText" class="text-danger></span>        </div>這是有道理的,因為當(dāng)我調(diào)試時,我看到的是:
查看完整描述

3 回答

?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗 獲得超1個贊

很奇怪。我所能建議的只是嘗試使 Id 屬性不是自動的,以通過查看調(diào)用堆棧來找出它的設(shè)置位置。


private int _id;

public int Id 

   get { return _id; }

   set { _id = value; } 

}

并使用“set”設(shè)置斷點(diǎn)


查看完整回答
反對 回復(fù) 2023-08-13
?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊

ASP.NET Core我嘗試通過使用以下代碼創(chuàng)建項目來重新生成您的錯誤:


public class BaseModel

{

    public int Id { set; get; }

    public DateTime CreatedAt { get; set; }

    public DateTime UpdatedAt { get; set; }

}


public class Question : BaseModel

{

    public string QuestionText { get; set; }

    public string Type { get; set; }

}


//Startup.cs

        services.AddDbContext<ApplicationDbContext>(options => 

        {

            options.UseSqlite(

                Configuration.GetConnectionString("DefaultConnection")

            );

        });



//Home Controller

    public IActionResult Test()

    {

        _applicationDbContext.Questions.Add(new Question

        {

            Id = 0, //Changing this value affects the behaviour of the application

            QuestionText = "Question text"

        });


        _applicationDbContext.SaveChanges();

        return View(_applicationDbContext.Questions.ToList());

    }

但是,我無法重新生成您的相同錯誤。當(dāng)Id(Test()方法中) 未設(shè)置或設(shè)置為等于 0 時,它可以工作。如果我設(shè)置為大于 0 的數(shù)字,例如 100,它第一次可以工作,但在下次運(yùn)行中會失敗,并顯示以下錯誤消息:


SQLite 錯誤 19:“UNIQUE 約束失敗:Questions.Id”


如您所見,我在這里使用 SQLite。生成的遷移如下:


        protected override void Up(MigrationBuilder migrationBuilder)

    {

        migrationBuilder.CreateTable(

            name: "Questions",

            columns: table => new

            {

                Id = table.Column<int>(nullable: false)

                    .Annotation("Sqlite:Autoincrement", true),

                CreatedAt = table.Column<DateTime>(nullable: false),

                UpdatedAt = table.Column<DateTime>(nullable: false),

                QuestionText = table.Column<string>(nullable: true),

                Type = table.Column<string>(nullable: true)

            },

            constraints: table =>

            {

                table.PrimaryKey("PK_Questions", x => x.Id);

            });

    }

這里,Idfield被創(chuàng)建為身份字段。


我可以得出的結(jié)論是,您的Id字段是作為identity數(shù)據(jù)庫自動設(shè)置的字段創(chuàng)建的。所以你不應(yīng)該為它設(shè)置一個特定的值。也許在您處理的某個地方設(shè)置了非零值。正如 @feihoa 所說,此時的斷點(diǎn)和調(diào)試會話可能會有所幫助。


startup.cs如果問題仍然存在,您的配置代碼、遷移代碼以及有關(guān)您正在使用的數(shù)據(jù)庫類型的信息可能會有所幫助。


查看完整回答
反對 回復(fù) 2023-08-13
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊

事實(shí)證明,我的問題實(shí)際上出在我的 create 方法中。這是損壞的代碼:



// GET: Questions/Create

        public IActionResult Create(int? id)

        {

            if (id == null) {

                return NotFound();

            }

            PopulateId(id);

            return View();

        }

修復(fù):



// GET: Questions/Create

        public IActionResult Create(int? questionGroupId)

        {

            if (questionGroupId== null) {

                return NotFound();

            }

            PopulateId(questionGroupId);

            return View();

        }

由于默認(rèn)啟動有這個模板:



app.UseMvc(routes =>

            {

                routes.MapRoute(

                    name: "default",

                    template: "{controller=Home}/{action=Index}/{id?}");

            });

綜上所述:


這是一個非常簡單的錯誤,因為我使用了糟糕的命名。默認(rèn)的 create get 方法沒有 ID,但由于我需要對頁面上的父對象執(zhí)行一些操作,因此我必須將其傳遞到我的視圖,并且 .Net 將我的 QuestionId(子級)設(shè)置為 QuestionGroupId (父)。


我希望這對遇到此問題的其他人有所幫助。


感謝評論者的幫助


查看完整回答
反對 回復(fù) 2023-08-13
  • 3 回答
  • 0 關(guān)注
  • 207 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號