1

Ich verwende die EntityFramework.Extended-Bibliothek, um die Überwachungsprotokollierung in meinem System zu implementieren. Wenn ich jedoch den Fremdschlüssel "TitleId" auf meinem Person-Objekt aktualisiere, wird es nicht als Fremdschlüssel registriert und ersetzt die ID nicht durch mein ausgewähltes Anzeigefeld.EntityFramework.Extended Audit - Fremdschlüsseleigenschaft IsRelationship immer falsch

Audit-Log config: (in meinem Global.asax Startdatei genannt wird)

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

Personenentität:

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

Titel Einheit:

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

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

Logik Update:

var audit = BeginAudit(); 

person.TitleId = model.TitleId; 

SaveChanges(); 

var log = audit.LastLog; 

Wenn durch die Eigenschaftsänderungen in audit.LastLog lookign wird die titlelD Modifikation nicht als Beziehung anerkannt und ist nicht meine Anzeige Umwandlung in den Config angegebene Anwendung.

Antwort

0

Das Attribut für Fremdschlüssel auf der Navigationseigenschaft gehen sollte, nicht den Fremdschlüssel selbst:

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

Aber in diesem Fall, dass Sie überhaupt das Attribut nicht benötigen, weil Ihre Klasse eine Namensgebung folgt Konvention, die Entity Framework

erkennt Und da Title nicht der Fremdschlüssel - TitleId ist, würde ich versuchen Sie dies:

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

Für die avoidan Ich habe alle Methoden versucht, einen Fremdschlüssel explizit zu deklarieren, und das Problem tritt immer noch auf. – Tomuke

Verwandte Themen