【问题标题】:Would it be possible to have optional ForeignKey on delete with Entity Framework?是否可以使用实体框架在删除时使用可选的 ForeignKey?
【发布时间】:2018-03-30 22:36:57
【问题描述】:

使用以下模型:

public class User {

    public int Id { get; set; }

    public string Name { get; set; }

    [ForeignKey("Id")]
    public List<UserLog> UserLogs { get; set; }

}
public class UserLog {

    [Key]
    public long LogId { get; set; }

    public int Id { get; set; }

    public string Name { get; set; }

    public string LogAction { get; set; }

    public DateTime LogCreatedOn { get; set; }

    public string By { get; set; }
}

我可以使用一个 SaveChangesAsync() 来插入/更新用户和用户日志。

我遇到的问题是当我向 UserLog 添加条目,然后删除用户,最后调用 SaveChangesAsync();从未添加用户日志。

例如

_db.UserLogs.Add(userLogItem); //never gets added.
//await _db.SaveChangesAsync(); //even trying to call this line right after.
_db.Users.Remove(user);
await _db.SaveChangesAsync();

非常感谢任何建议。

【问题讨论】:

    标签: c# database linq asp.net-core-2.0 ef-core-2.0


    【解决方案1】:

    当我有一对多关系时,这就是我定义模型的方式。

    public class User
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
    
        public string Name { get; set; }
    
        public virtual ICollection<UserLog> UserLogs { get; set; }
    }
    
    public class UserLog
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public long LogId { get; set; }
    
        public int Id { get; set; }
    
        public string Name { get; set; }
    
        public string LogAction { get; set; }
    
        public DateTime LogCreatedOn { get; set; }
    
        public string By { get; set; }
    
        [ForeignKey("Id")]
        public virtual User User { get; set; }
    }
    

    【讨论】:

    • 感谢您的回答。我正在尝试。但是,没有插入 UserLog。我的代码是这样的:_db.UserLogs.Add(userLog);_db.Remove(user);await _db.SaveChangesAsync();
    • 你到底想做什么?我想您想为特定用户添加日志。如果这是您尝试做的,那么您的代码不正确。
    • 是的,我想在从用户表中删除实际记录之前添加带有 LogAction="Deleted" 的 UserLog,并调用 SaveChanges。请问一下它的正确代码是什么?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多