gpt4 book ai didi

c# - Entity Framework 只保存最后一行(主要细节)

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:49 25 4
gpt4 key购买 nike

我的项目是 c# Windows 应用程序,我使用的是 Entity Framework 5 和 .net 4.5。

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

在我的表单上,我有一个 RoomNo 和 Station 字段,还有添加和删除按钮,用于将床添加/删除到 datagridview

DB Structure

Rooms (table)
PK_Rooms
FK_Station
RoomNo

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

下面是我将房间和床添加到数据库的添加方法

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();

(例如:添加 4 张床的 1201 房间)只有最后一排床被保存到数据库中。

我的问题:

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

最佳答案

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

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 获得一些性能:

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();

关于c# - Entity Framework 只保存最后一行(主要细节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com