我刚开始使用Entity Framework,因此无法弄清此错误。我正在从Excel工作表中提取数据,并将其放入带有EF的数据库中。关于此问题还有其他帖子,但是经过这些帖子之后,似乎什么都没有用。
要结束我的错误声明,它说:“数据库'DataWarehouse'中的表'dbo.RVTools_vSwitch'的列'vSwitch_id'中发生了冲突。”在遵循此方法的论文线索中,我可以确认dbo.RVTools_vSwitch表中是否存在列'vSwitch_id'。 vSwitch是我的excel文件中的图纸之一,而vSwitch_id由EF自动生成。
当我尝试从其他Excel工作表vPort导入数据时,遇到了问题。 vSwitch_id是需要导入数据库的项目之一。因此,我有一个GetID函数,该函数使用excel工作表中提供的一些参数来查找正确的ID,但这仍然行不通。
我尝试的下一件事情是浏览vPort和vSwitch的类,这些类包含将数据添加到数据库中的EF调用,以及进行迁移以检查所需的所有内容是否存在,但在那里找不到任何问题。
因此,如果我具有正确的迁移,正确的类,来自excel的正确数据,并且数据库中具有正确的表和行,则什么可能导致此错误?
这是用于将数据从excel导入数据库的代码。 VSwitchId是错误所在,而vPort是我要导入的工作表:
foreach (DataRow dataRow in Data.Rows)
{
context.RvtoolsVPort.Add(new RvtoolsVPort
{
PortGroup = dataRow[0].ToString(),
Vlan = Convert.ToInt32(dataRow[1]),
PromiscuousMode = Convert.ToBoolean(bool.Parse(dataRow[2].ToString())),
MacChanges = Convert.ToBoolean(bool.Parse(dataRow[3].ToString())),
ForgedTransmits = Convert.ToBoolean(bool.Parse(dataRow[4].ToString())),
TrafficShaping = Convert.ToBoolean(bool.Parse(dataRow[5].ToString())),
Width = Convert.ToInt32(dataRow[6]),
Peak = Convert.ToInt32(dataRow[7]),
Burst = Convert.ToInt32(dataRow[8]),
Policy = dataRow[9].ToString(),
ReversePolicy = Convert.ToBoolean(bool.Parse(dataRow[10].ToString())),
NotifySwitch = Convert.ToBoolean(bool.Parse(dataRow[11].ToString())),
RollingOrder = Convert.ToBoolean(bool.Parse(dataRow[12].ToString())),
Offload = Convert.ToBoolean(bool.Parse(dataRow[13].ToString())),
Tso = Convert.ToBoolean(bool.Parse(dataRow[14].ToString())),
ZeroCopyXmit = Convert.ToBoolean(bool.Parse(dataRow[15].ToString())),
VSwitchId = vSwitch.GetID(dataRow[19].ToString(), dataRow[16].ToString(), dataRow[18].ToString(), dataRow[17].ToString(), assessment_id),
AssessmentId = assessment_id
});
context.SaveChanges();
}
这是vPort的类:
namespace KelderModel
{
public partial class RvtoolsVPort
{
public int VPortId { get; set; }
public string PortGroup { get; set; }
public int? Vlan { get; set; }
public bool? PromiscuousMode { get; set; }
public bool? MacChanges { get; set; }
public bool? ForgedTransmits { get; set; }
public bool? TrafficShaping { get; set; }
public int? Width { get; set; }
public int? Peak { get; set; }
public int? Burst { get; set; }
public string Policy { get; set; }
public bool? ReversePolicy { get; set; }
public bool? NotifySwitch { get; set; }
public bool? RollingOrder { get; set; }
public bool? Offload { get; set; }
public bool? Tso { get; set; }
public bool? ZeroCopyXmit { get; set; }
public int VSwitchId { get; set; }
public int AssessmentId { get; set; }
public virtual Assessment Assessment { get; set; }
public virtual RvtoolsVSwitch VSwitch { get; set; }
}
}
最后,这是我迁移vPort的代码:
migrationBuilder.CreateTable(
name: "RVTools_vPort",
columns: table => new
{
vPort_id = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
port_group = table.Column<string>(unicode: false, maxLength: 255, nullable: true),
vlan = table.Column<int>(nullable: true),
promiscuous_mode = table.Column<bool>(nullable: true),
MAC_changes = table.Column<bool>(nullable: true),
forged_transmits = table.Column<bool>(nullable: true),
traffic_shaping = table.Column<bool>(nullable: true),
width = table.Column<int>(nullable: true),
peak = table.Column<int>(nullable: true),
burst = table.Column<int>(nullable: true),
policy = table.Column<string>(unicode: false, maxLength: 255, nullable: true),
reverse_policy = table.Column<bool>(nullable: true),
notify_switch = table.Column<bool>(nullable: true),
rolling_order = table.Column<bool>(nullable: true),
offload = table.Column<bool>(nullable: true),
TSO = table.Column<bool>(nullable: true),
zero_copy_xmit = table.Column<bool>(nullable: true),
vSwitch_id = table.Column<int>(nullable: false),
assessment_id = table.Column<int>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_RVTools_vPort", x => x.vPort_id);
table.ForeignKey(
name: "FK_849",
column: x => x.assessment_id,
principalTable: "Assessment",
principalColumn: "assessment_id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_718",
column: x => x.vSwitch_id,
principalTable: "RVTools_vSwitch",
principalColumn: "vSwitch_id",
onDelete: ReferentialAction.Restrict);
});
在迁移中是否存在一些约束条件问题?谢谢您可能带来的帮助。