我有两个班级:
public partial class TSS_Filter
{
[Key]
public int filter_id { get; set; }
public int? rackId { get; set; }
public virtual TSS_Rack TSS_Rack { get; set; }
}
和
public partial class TSS_Rack
{
public TSS_Rack()
{
TSS_Filter = new HashSet<TSS_Filter>();
}
[Key]
public int rack_id { get; set; }
public virtual ICollection<TSS_Filter> TSS_Filter { get; set; }
}
当我尝试使用Rack对象保存过滤器时,它会获取数据库中Rack对象的副本,然后使用下一个顺序主键重新创建它,并且所有其余数据都是相同的。
示例:
Rack Table:
1 - rack 1 - datais here <- the rack row I want to use for the foreign key
2 - rack 1 - datais here <- the created copy row that actually get assigned
为什么sql server / entity framework会以这种方式运行?
保存代码:
using (ScaleManagerEntities SSDb = new ScaleManagerEntities())
{
TSS_Filter filter = new TSS_Filter();
filter.TSS_Rack = SelectedRack;
SSDb.SaveChanges();
}
答案 0 :(得分:0)
using (ScaleManagerEntities SSDb = new ScaleManagerEntities())
{
TSS_Rack rack = SSDb.TSS_Rack.Where(r => r.rack_id == SelectedRack.rack_id).FirstOrDefault();
foreach (TSS_Filter filter in Filters)
{
filter.createdAt = DateTime.Now;
filter.isUsed = false;
filter.TSS_Rack = rack;
SSDb.TSS_Filter.Add(filter);
}
SSDb.SaveChanges();
}
如果我在与我保存相同的上下文中查找机架,那么数据库在知道它是同一个对象时没有任何问题。看起来很奇怪,它根本不会知道它们是基于RackId的数据库中的同一行。
将会感谢任何可能使数据库识别相同的使用会话之外的对象。感谢。