我正在编写一个C#MVC5 Internet应用程序,并且在我的一个对象中设置外键引用时遇到了一个问题。
我有一个House
对象,其List<Room>
。我想在Room
对象中添加外键引用,引用House
所属的Room
。
这是我的代码:
public class House
{
[Key]
public int Id { get; set; }
public string name { get; set; }
public virtual List<Room> rooms { get; set; }
public House()
{
rooms = new List<Room>();
}
}
public class Room
{
[Key]
public int Id { get; set; }
public int roomNumber { get; set; }
[ForeignKey("Id")]
public House house { get; set; }
}
以下是我创建House
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include="Id,name")] House house)
{
if (ModelState.IsValid)
{
db.houses.Add(house);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewBag.Id = new SelectList(db.rooms, "Id", "Id", house.Id);
return View(house);
}
我收到以下错误:
Unable to cast object of type 'System.Collections.Generic.List`1[TestDeleteForeignKeyReferences.Models.Room]' to type 'TestDeleteForeignKeyReferences.Models.Room'.
在以下代码行中:
db.houses.Add(house);
如果我在Room
对象中没有以下代码行,则不会发生错误:
[ForeignKey("Id")]
我没有正确编码外键引用吗?我需要做些什么才能使这段代码正常工作?
提前致谢
修改
我已经将我的课程编码为您在答案中编码的内容,现在当我尝试创建一个新的Room控制器时,我收到以下错误:
http://www.canninginc.co.nz/ForumPost/House_Room_Controller_Error.png
答案 0 :(得分:0)
您的模型应该是(您的外键属性使用不正确,并且您在“house”属性中缺少“virtual”指令):
public class House
{
[Key]
public int Id { get; set; }
public string name { get; set; }
public virtual ICollection<Room> rooms { get; set; }
public House()
{
rooms = new List<Room>();
}
}
public class Room
{
[Key]
public int Id { get; set; }
public int roomNumber { get; set; }
public int HouseId {get; set; }
public virtual House house { get; set; }
}