[英]Add One to many relationship EF 6
我正在为打印机审核应用程序。 因此,当用户选择打印机名称时,他可以看到与其相关的所有用户。 这是我的数据库模型:
我正在考虑构建一个小脚本,用于从用户的PC向WCF服务发送用户名帐户,PC名称,打印机列表和日期时间。 然后,WCF服务可以将这些信息上载到数据库中。
但是...我有一个问题要了解如何建立具有一对多关系的新记录。
public void AuditRecord(DateTime date,String user,string[] printer, String pc)
{
var USR = new Users ()
{
UserName = user,
};
var PC = new Pc()
{
PcName = pc,
};
var PTR = new Printers();
List<Printers> ptr = new List<Printers>();
for (int i = 0;i<printer.Count;i++)
{
ptr.Add(new Printers
{
PrinterName= printer[i],
});
}
var REF = new Reference()
{
Date = date,
};
context.SaveChanges(); }
编辑:
使用此解决方案,它可以插入。
ptr.ToList().ForEach(p=>
{
var RF = new Reference() {Date=DateTime.Now};
var USR = new Users() {UserName=user};
var PC = new Pc() {PcName=pc};
var PTR = new Printers() {PrinterName = p };
PTR.Reference.Add(RF);
USR.Reference.Add(RF);
PC.Reference.Add(RF);
context.Pc.Add(PC);
context.Users.Add(USR);
context.Printers.Add(PTR);
});
context.SavesChanges();
但是我在参考表中有问题。 如果用户使用三台打印机,则需要为每台打印机插入ID,并为User和Pc插入相同的ID。 像这样
Date | PrinterId | UserId | PcId
17/11/15 1 1 1
17/11/15 2 1 1
17/11/15 3 1 1
我有 :
Date | PrinterId | UserId | PcId
17/11/15 1 1 1
17/11/15 2 2 2
17/11/15 3 3 3
参考您的图,您应该具有类似的模型,如下所示:
class Reference
{
public Reference()
{
Printers = new HashSet<Printers>();
Pc = new HashSet<Pc>();
Users = new HashSet<Users>();
}
public DateTime Date { get; set; }
public ICollection<Printers> Printers { get; set; }
public ICollection<Pc> Pc { get; set; }
public ICollection<Users> Users { get; set; }
}
您可以使用.Add()
方法添加关系,如下所示:
public void AuditRecord(DateTime date, String user, string[] printer, String pc)
{
// enumerate through printer names because each Reference only has 1 printer
printer.ToList().ForEach(p =>
{
// instantiate the instances
var USR = new Users() { UserName = user };
var PC = new Pc() { PcName = pc };
var PTR = new Printers() { PrinterName = p }
var REF = new Reference() { Date = date };
REF.Users.Add(USR); // add User to Reference
REF.Pc.Add(PC); // add PC to Reference
REF.Printers.Add(PTR); // add Printer to Reference
// add new instances into context for saving
context.Set<Users>().Add(USR);
context.Set<Pc>().Add(PC);
context.Set<Printers>().Add(PTR);
context.Set<Reference>().Add(REF);
});
context.SaveChanges();
}
最后我有解决方案:
var USR = new Users() {UserName=user};
var PC = new Pc() {PcName=pc};
ptr.ToList().ForEach(p=>
{
var RF = new Reference() {Date=DateTime.Now};
var PTR = new Printers() {PrinterName = p };
PTR.Reference.Add(RF);
USR.Reference.Add(RF);
PC.Reference.Add(RF);
context.Set<Pc>().Add(PC);
context.Set<Users>().Add(USR);
context.Set<Printers>().Add(PTR);
});
context.SavesChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.