在我的数据模型(实体框架6.1.3,ASP.NET MVC 5,代码第一次与现有数据库中)有两个表,“人”和“用户 “它们拥有一对一的关系。 “用户”表格有PKPersonID列依次是“Person”表的PK。我希望每当创建一个新的用户记录时,都会自动创建一个Person记录(第一个),然后将Person表中PersonID的值插入到新用户记录中。一比一实体框架的关系
这是Person表型号代码:
[Table("Person")]
public partial class Person
{
public int PersonID { get; set; }
public virtual User User { get; set; }
}
这是为用户表中的模型的代码:
[Table("User")]
public partial class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int PersonID { get; set; }
[Required]
[StringLength(20)]
public string Name { get; set; }
public virtual Person Person { get; set; }
}
的UserController.cs代码包括:
// POST: User/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "PersonID,Name")] User user)
{
if (ModelState.IsValid)
{
db.Users.Add(user);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.PersonID = new SelectList(db.People, "PersonID", "PersonID", user.PersonID);
return View(user);
}
Person表的SQL:
CREATE TABLE [dbo].[Person](
[PersonID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL
CONSTRAINT [PK_Person_PersonID] PRIMARY KEY CLUSTERED)
为用户表中的SQL:提前
CREATE TABLE [dbo].[User](
[PersonID] [int] NOT NULL,
[Name] [nvarchar](20) NOT NULL
CONSTRAINT [PK_User_PersonID] PRIMARY KEY CLUSTERED)
ALTER TABLE [dbo].[User] WITH CHECK ADD CONSTRAINT [FK_User_Person_PersonID] FOREIGN KEY([PersonID])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_Person_PersonID]
GO
谢谢,galaf。
正如我在我的回答中所建议的,用户具有'PersonID'作为PK和FK,所以当你想提交你的数据时('Create' post action),你需要建立两个实体('User和Person'),所以在你的视图,你应该显示两个实体数据 – Monah
我编辑了答案,为你的案例添加代码。 – Monah
是的UserDTO是一个新的类,更好地使它在单独的文件,本文将帮助您更好地了解DTO的使用http://www.asp.net/web-api/overview/data/using-web -api-with-entity-framework/part-5 – Monah