多个实例

时间:2016-06-03 20:26:51

标签: c# entity-framework

我正在尝试从文本框输入(int)插入一个房间到我的数据库,一个组合框显示数据库中的所有建筑物,组合框显示数据库中的所有楼层,我遇到了这个错误:< / p>

  

“IEntityChangeTracker的多个实例无法引用实体对象。”

并不太确定如何解决这个问题。

FormAddRoom.cs:

http://pastebin.com/Cst5bBbD

数据模型:

public class Building
{
    public int BuildingID { get; set; }

    public string Name { get; set; }

    public Hotel Hotel { get; set; }

    public virtual ICollection<Floor> Floors { get; set; }
}

public class Floor
{
    public int FloorID { get; set; }

    public string Name { get; set; }

    public virtual Building Building { get; set; }

    public virtual ICollection<Room> Rooms { get; set; }
}

    public class RoomType
{
    public int RoomTypeID { get; set; }

    public string Name { get; set; }
}

Databasehandler方法:

    public static List<Building> GetAllBuildingsByHotel(string hotel)
    {
        HotelDbContext context = new HotelDbContext();

        var buildings = context.Buildings.Where(b => b.Hotel.Name == hotel).ToList();

        return buildings;
    }

    public static List<Floor> GetAllFloorsFromBuilding(int buildingid)
    {
        HotelDbContext context = new HotelDbContext();

        var floors = context.Floors.Where(f => f.Building.BuildingID == buildingid).ToList();

        return floors;
    }

    public static int InsertRoom(Room room)
    {
        HotelDbContext context = new HotelDbContext();

        context.Rooms.Add(room);
        context.SaveChanges();

        return room.RoomID;
    }

1 个答案:

答案 0 :(得分:2)

如果您正在使用跟踪实体(默认EF设置),则无法从上下文的一个实例获取对象并将其放入另一个实例中。您需要针对单个上下文实例执行所有工作。