首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架仅保存最后一行(主详细信息)

实体框架仅保存最后一行(主详细信息)
EN

Stack Overflow用户
提问于 2016-05-21 10:41:41
回答 1查看 921关注 0票数 2

我的项目是c# Windows应用程序,我正在使用实体框架5和.net 4.5。

我有房间和床模块,您可以添加、编辑和删除房间和/或床

在我的表单中,我有一个用于RoomNo和Station的字段,也有添加和删除按钮来添加/删除数据库视图。

代码语言:javascript
运行
复制
DB Structure

Rooms (table)
PK_Rooms
FK_Station
RoomNo

Beds (table)
PK_Beds
FK_Rooms
BedNo
FullRoomNo (concat only of Roomno and Bedno)
RoomStatus

下面是我为DB添加房间和床的方法

代码语言:javascript
运行
复制
M3dEntities m3d = new M3dEntities();
rooms rooms = new rooms();
beds beds = new beds();

string RoomNo = RoomNoTxt.Text;
        int  StationID = Int32.Parse(StationCmb.SelectedValue.ToString());

        var roomnoexist = from g in m3d.rooms
                          where g.RoomNo == RoomNo
                          select g;

        if (roomnoexist.Any())
        {
            MessageBox.Show("Room No. Already Exist!");
        }
        else
        {
            rooms.RoomNo = RoomNo;
            rooms.FK_Stations = StationID;

            m3d.rooms.AddObject(rooms);
        }

        foreach (DataGridViewRow row in BedsDataGridView.Rows)
        {
            beds.Bedno = row.Cells[0].Value.ToString();
            beds.FullRoomNo = row.Cells[1].Value.ToString();
            beds.RoomStatus = "Available";
            m3d.beds.AddObject(beds);
        }

        m3d.SaveChanges();

(例:增加1201房间,有4张床)只有最后一行的床被保存到DB。

我的问题:

  1. 为什么只保存最后一行?
  2. 如何将所有行保存到床上?
  3. 如何为编辑方法(添加另一张床或删除当前房间的床)做这件事?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-21 13:29:33

您应该将beds beds = new beds();指令移动到foreach语句中,如下所示:

代码语言:javascript
运行
复制
foreach (DataGridViewRow row in BedsDataGridView.Rows)
{
     beds beds = new beds(); // Here is its place.
     beds.Bedno = row.Cells[0].Value.ToString();
     beds.FullRoomNo = row.Cells[1].Value.ToString();
     beds.RoomStatus = "Available";
     m3d.beds.AddObject(beds);
}

说明您总是使用beds的最后一个实例,该实例最终包含最后一行,并且只保存该行。

侧注:为了获得某些性能,如果您要插入多个对象一次,请使用AddRange

代码语言:javascript
运行
复制
var bedsCollection = new List<beds>();
foreach (DataGridViewRow row in BedsDataGridView.Rows)
{
     beds beds = new beds(); // Here is its place.
     beds.Bedno = row.Cells[0].Value.ToString();
     beds.FullRoomNo = row.Cells[1].Value.ToString();
     beds.RoomStatus = "Available";
     bedsCollection.Add(beds); // update the collection not the DbSet
}

m3d.beds.AddRange(bedsCollection);
m3d.SaveChanges();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37361840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档