在我的數據模型(實體框架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