【问题标题】:EntityFramework.Extended Audit - foreign key property IsRelationship always falseEntityFramework.Extended Audit - 外键属性 IsRelationship 始终为 false
【发布时间】:2016-09-29 12:57:38
【问题描述】:

我正在使用 EntityFramework.Extended 库在我的系统中实现审计日志记录。但是,当我更新 Person 对象上的外键“TitleId”时,它不会将其注册为外键,也不会用我选择的显示字段替换 Id。

审核日志配置:(在我的 Global.asax 启动文件中调用)

public static class AuditLogConfiguration
    {
        public static void Register()
        {
            var auditConfiguration = AuditConfiguration.Default;

            auditConfiguration.IncludeRelationships = true;
            auditConfiguration.LoadRelationships = true;
            auditConfiguration.DefaultAuditable = true;

            // Use abbreviation value in audit log whenever Title is used as foreign key
            auditConfiguration.IsAuditable<Title>()
                .DisplayMember(x => x.Abbreviation);
        }
    }

个人实体:

public class Person
    {
        [Key]
        public int Id { get; set; }

        [ForeignKey("Title")]
        public int TitleId { get; set; }

        public string Forename { get; set; }
        public string Surname { get; set; }

        public virtual Title Title { get; set; }
}

标题实体:

public class Title
{
    public int Id { get; set; }

    public string Abbreviation { get; set; }
    public string Description { get; set; }
}

更新逻辑:

var audit = BeginAudit();

person.TitleId = model.TitleId;

SaveChanges();

var log = audit.LastLog;

当查看audit.LastLog 中的属性更改时,TitleId 修改未被识别为关系,并且未应用我在配置中指定的显示转换。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework audit-logging entityframework.extended


    【解决方案1】:

    外键的属性应该放在导航属性上,而不是外键本身:

    [ForeignKey("TitleId")]
    public virtual Title Title { get; set; }
    

    但在这种情况下,您根本不需要该属性,因为您的类遵循 Entity Framework 认可的命名约定

    而且,由于 Title 不是外键 - TitleId 是,我会试试这个:

    // Use abbreviation value in audit log whenever TitleId is used as foreign key
    auditConfiguration.IsAuditable<TitleId>()
                      .DisplayMember(x => x.Abbreviation);
    

    【讨论】:

    • 为免生疑问,我已经尝试了所有显式声明外键的方法,但问题仍然存在。
    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多