SQL Server正在将我的数据复制到一个新行而不是使用原始数据并只分配外键?

时间:2015-08-21 19:08:51

标签: c# sql sql-server wpf entity-framework

我有两个班级:

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

1 个答案:

答案 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的数据库中的同一行。

将会感谢任何可能使数据库识别相同的使用会话之外的对象。感谢。