使用ForeignKey属性时输出对象时出错

时间:2014-08-20 04:33:19

标签: c# model casting asp.net-mvc-5 foreign-key-relationship

我正在编写一个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

1 个答案:

答案 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; }
}