我真的很陌生,所以感谢你的帮助...
所以我面临的挑战是将大量数据导入现有的sql 2012数据库,从每个新客户端的3个csv文件导入,他们是50个新客户端,每个客户端有3个csv文件。
我正在创建一个迷你Windows窗体应用程序,并在个人客户端进行导入。
然而,如何保持数据关系的设计理念正是我所挣扎的。
这是基本的csv对象映射:
所以我可以阅读客户数据,但我不知道如何阅读订单和约会,并在分配新的ID时保持它们之间的联系?)
private void btnImport_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtClients.Text) && !string.IsNullOrEmpty(txtAccountId.Text))
{
var accountId = txtAccountId.Text;
var clientData = File.ReadAllLines(txtClients.Text)
.Skip(1)
.Select(x => x.Split(','))
.Select(x => new Client()
{
ClientTempId = int.Parse(x[0]),
FirstName = x[1],
LastName = x[2],
AccountId = accountId,
Id = Guid.NewGuid().ToString()
});
//Import Orders and then Appointments and maintain relationships....
}
}
public class Client
{
public string Id { get; set; }
public int ClientTempId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string AccountId { get; set; }
}
public class Order
{
public string Id { get; set; }
public int OrderTempId { get; set; }
public string Name { get; set; }
public string ClientId { get; set; }
public string AccountId { get; set; }
}
public class Appointment
{
public string Id { get; set; }
public int AppointmentTempId { get; set; }
public string ClientId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string AccountId { get; set; }
}
我感谢您提供的示例和帮助。
答案 0 :(得分:0)
在这种情况下,我经常使用从旧的int键创建一个guid的技巧:
string guid = String.Format("00000000-0000-0000-0000-{0:000000000000}", id);
这会产生如下指导:
00000000-0000-0000-0000-000000000077
这使您可以轻松保持记录之间的关系。
答案 1 :(得分:0)
我的工作也有类似的要求。我所做的是分别加载每个文件(但按适当的顺序),每个文件都加载到临时临时表。登台表没有任何参照约束,我不关心在将数据从文件加载到登台表时保持参照完整性。在加载所有文件之后,我然后使用查询来插入/更新主表,再次保持正确的顺序。这里的关键是确保只有在父表中存在父FK时才从登台表中插入/更新记录,这可以使用连接在一个查询(每个子表)中轻松完成。此时数据全部在SQL服务器上,因此将数据从一个表复制到另一个表可以非常快。以同样的方式,还可以报告或以其他方式对任何孤立的子记录采取行动。最后,我删除了临时表,主表都很好并且一致。