保存

时间:2016-06-09 06:42:24

标签: c# entity-framework

我遇到了一个我无法解释的奇怪问题。

我在这里与EF合作。有一个方法可以将包装器对象中的某些值复制到数据库中已有的对象中。必须使用包装器对象中的值更新数据库中的对象。

以下是代码:

private void UpdateAudit(AuditWrapper audit, DatabaseAccess dbAccess)
{
        var foundAudit = dbAccess.Audits.Include("Auditors").SingleOrDefault(_ => _.Audit_ID == audit.Audit_ID);    
        if(foundAudit != null)
        {
            foundAudit.Auditorennamen = audit.Auditorennamen;
            foundAudit.AuditTarget = audit.AuditTarget;
            foundAudit.Scopes = audit.Scopes;
            foundAudit.Location = audit.Location;
            foundAudit.Address = audit.Address;

            foundAudit.Auditors.Clear();

            foreach (var item in audit.Auditors)
            {
                var usr = dbAccess.Users.SingleOrDefault(_ => _.Username == item.Username);
                if (usr != null)
                {
                    var uta = dbAccess.User_To_Audit.Create();
                    uta.Function = item.Function;
                    uta.User = usr;
                    uta.Audit_GeneratedID = foundAudit.GeneratedID;
                    uta.Audit = foundAudit;
                    foundAudit.Auditors.Add(uta);
                }   
            }
        }

        dbAccess.SaveChanges();
    }

User_To_Audit对象中,Audit设置为null,即使我从数据库中选择它时它不为空。

当我使用db.SaveChanges()时,不知道为什么它被设置为null。

好吧,我不知道该属性是否真的为null,但我可以告诉它将null保存到外键列的数据库中。

我已经尝试过只设置GeneratedID或只设置审核或不设置任何一个。每次都有同样的效果。

[ForeignKey("Audit")]
public int Audit_GeneratedID { get; set; }
public virtual Audit Audit { get; set; }

请帮忙

更新: Audit有一个List<User_To_Audit>User_To_Audit引用了它所属的Audit

public class Audit
{
    [Key]
    public int GeneratedID { get; set; }
    [Index("Audit_ID", IsUnique = true)]
    public int Audit_ID { get; set; }
    .
    .
    .
    public virtual List<User_To_Audit> Auditors { get; set; }
}

public class User_To_Audit
{
    [Key]
    public int ID { get; set; }
    public virtual User User { get; set; }
    [ForeignKey("Audit")]
    public int Audit_GeneratedID { get; set; }
    public virtual Audit Audit { get; set; }
    public virtual AuditorFunction Function { get; set; }
}

0 个答案:

没有答案