1

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 の変更が関係として認識されず、構成で指定された表示変換が適用されません。

4

1 に答える 1

0

外部キーの属性は、外部キー自体ではなく、ナビゲーション プロパティに指定する必要があります。

[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);
于 2016-05-31T15:44:42.847 に答える