Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 MVC4创建论坛线程并同时发布外键异常错误_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 4 MVC4创建论坛线程并同时发布外键异常错误

Asp.net mvc 4 MVC4创建论坛线程并同时发布外键异常错误,asp.net-mvc-4,Asp.net Mvc 4,我仍在努力创建论坛。我试图在同一时间用帖子来创建新的主题(就像每个普通论坛一样)。我有两种型号: 穹窿线 public partial class FORUMTHREAD { public FORUMTHREAD() { this.FORUMCATEGORY = new HashSet<FORUMCATEGORY>(); this.FORUMPOST = new HashSet<FORUMPOST>(); }

我仍在努力创建论坛。我试图在同一时间用帖子来创建新的主题(就像每个普通论坛一样)。我有两种型号:

穹窿线

public partial class FORUMTHREAD
{
    public FORUMTHREAD()
    {
        this.FORUMCATEGORY = new HashSet<FORUMCATEGORY>();
        this.FORUMPOST = new HashSet<FORUMPOST>();
    }

    public int TH_ID { get; set; }
    public System.DateTime DATE { get; set; }
    public string TOPIC { get; set; }
    public string USER { get; set; }

    public virtual ICollection<FORUMCATEGORY> FORUMCATEGORY { get; set; }
    public virtual ICollection<FORUMPOST> FORUMPOST { get; set; }
}
有人能帮我写一个可以工作的create函数吗

编辑:

SQL中的表定义:

CREATE TABLE [dbo].[FORUMTHREAD] (
[TH_ID] INT            IDENTITY (1, 1) NOT NULL,
[DATE]  DATETIME       NOT NULL,
[TOPIC] NVARCHAR (MAX) NOT NULL,
[USER]  NVARCHAR (MAX) NOT NULL,
PRIMARY KEY CLUSTERED ([TH_ID] ASC)
);

CREATE TABLE [dbo].[FORUMPOST] (
[PO_ID] INT            IDENTITY (1, 1) NOT NULL,
[DATE]  DATETIME       NOT NULL,
[POST]  NVARCHAR (MAX) NOT NULL,
[USER]  NVARCHAR (MAX) NOT NULL,
PRIMARY KEY CLUSTERED ([PO_ID] ASC)
);

CREATE TABLE [dbo].[TH_PO] (
[TH_ID] INT NOT NULL,
[PO_ID] INT NOT NULL,
PRIMARY KEY CLUSTERED ([TH_ID] ASC, [PO_ID] ASC),
CONSTRAINT [FK_TH_PO_ToTable_1] FOREIGN KEY ([PO_ID]) REFERENCES [dbo].[FORUMPOST] ([PO_ID]),
CONSTRAINT [FK_TH_PO_ToTable] FOREIGN KEY ([TH_ID]) REFERENCES [dbo].[FORUMTHREAD] ([TH_ID])
);

看看你的模型-我能理解一个线程有多个帖子。但是一篇文章属于多个线程是故意的吗?我希望这是一对多的关系,而不是多对一的关系。您的表定义是什么样子的?我在“编辑”中添加了表,但您是对的。将一篇文章放到多个线程中是没有意义的。如果我删除THU PO表并将THU ID外键添加到FORUMPOST表中,应该会更容易实现它?我想是的。并相应地更改模型-FORUMPOST上的FORUMTHREAD属性成为FORUMTHREAD的实例和实例,而不是它们的集合。我想我解决了这个问题。现在的问题是我得到了错误:
{“将datetime2数据类型转换为datetime数据类型导致值超出范围。\r\n语句已终止。”}
。这很奇怪,因为在DB中我使用的是datetime而不是datetime2。
[Authorize(Roles = "Administrator,Moderator,User")]
    public ActionResult Create()
    {
        var db = new MainDatabaseEntities();

        var viewModel = new FORUMTHREAD
        {
            FORUMCATEGORY = db.FORUMCATEGORY.Select(c => new { CA_ID = c.CA_ID, CATEGORY = c.CATEGORY, isSelected = false }).ToList().Select(g => new FORUMCATEGORY
            {
                CA_ID = g.CA_ID,
                CATEGORY = g.CATEGORY,
                isSelected = false
            }).ToList(),
        };


        return View(viewModel);
    }

    //
    // POST: /Forum/Create
    [Authorize(Roles = "Administrator,Moderator,User")]
    [HttpPost]
    public ActionResult Create(FORUMTHREAD forumthread,FORUMPOST forumpost, String user, String post)
    {
        var db = new MainDatabaseEntities();

        var newthread = new FORUMTHREAD
        {
            TH_ID = forumthread.TH_ID,
            DATE = DateTime.Now,
            TOPIC = forumthread.TOPIC,
            USER = user,
            FORUMCATEGORY = new List<FORUMCATEGORY>(),
            FORUMPOST = new List<FORUMPOST>(),
        };
        var newpost = new FORUMPOST
        {
            PO_ID = forumpost.PO_ID,
            POST = post,
            USER = user,
            DATE = DateTime.Now, 
            FORUMTHREAD = forumpost.FORUMTHREAD
        };
        foreach (var selectedThread in forumthread.FORUMCATEGORY.Where(c => c.isSelected))
        {
            var category = new FORUMCATEGORY { CA_ID = selectedThread.CA_ID };
            db.FORUMCATEGORY.Attach(category);
            newthread.FORUMCATEGORY.Add(category);
        }

        db.FORUMTHREAD.Add(newthread);
        newthread.FORUMPOST.Add(newpost);
        db.FORUMPOST.Attach(newpost);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
@model AnimeWeb.Models.FORUMTHREAD

<h2>New Thread</h2>

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <div class="editor-field">
        @Html.HiddenFor(model => model.TH_ID)
        @Html.ValidationMessageFor(model => model.TH_ID)
    </div>
    <div class="editor-label">
        Topic
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.TOPIC)
        @Html.ValidationMessageFor(model => model.TOPIC)
    </div>
    <div class="editor-label">
        Tags
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.FORUMCATEGORY)
        @Html.ValidationMessageFor(model => model.FORUMCATEGORY)
    </div>
    <div>
        Post
    </div>
    <div>
        <input type="text" id="ss" name="post" value="" />
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}
{"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_TH_PO_ToTable_1\". The conflict occurred in database \"C:\\USERS\\PLACEK\\DOCUMENTS\\VISUAL STUDIO 2013\\PROJECTS\\ANIMEWEB\\ANIMEWEB\\APP_DATA\\MAINDATABASE.MDF\", table \"dbo.FORUMPOST\", column 'PO_ID'.\r\nThe statement has been terminated."}
CREATE TABLE [dbo].[FORUMTHREAD] (
[TH_ID] INT            IDENTITY (1, 1) NOT NULL,
[DATE]  DATETIME       NOT NULL,
[TOPIC] NVARCHAR (MAX) NOT NULL,
[USER]  NVARCHAR (MAX) NOT NULL,
PRIMARY KEY CLUSTERED ([TH_ID] ASC)
);

CREATE TABLE [dbo].[FORUMPOST] (
[PO_ID] INT            IDENTITY (1, 1) NOT NULL,
[DATE]  DATETIME       NOT NULL,
[POST]  NVARCHAR (MAX) NOT NULL,
[USER]  NVARCHAR (MAX) NOT NULL,
PRIMARY KEY CLUSTERED ([PO_ID] ASC)
);

CREATE TABLE [dbo].[TH_PO] (
[TH_ID] INT NOT NULL,
[PO_ID] INT NOT NULL,
PRIMARY KEY CLUSTERED ([TH_ID] ASC, [PO_ID] ASC),
CONSTRAINT [FK_TH_PO_ToTable_1] FOREIGN KEY ([PO_ID]) REFERENCES [dbo].[FORUMPOST] ([PO_ID]),
CONSTRAINT [FK_TH_PO_ToTable] FOREIGN KEY ([TH_ID]) REFERENCES [dbo].[FORUMTHREAD] ([TH_ID])
);