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])
);