Найти родительский EntityKey и ввести в Entity Framework - PullRequest
0 голосов
/ 08 июня 2011

Можно ли получить EntityKey и тип родительской сущности сущности, не зная типа? Я пытался сделать следующее

public partial class TestEntities
{
    partial void OnContextCreated()
    {
        this.SavingChanges += new EventHandler(logChanges);
    }

    void logChanges(object sender, EventArgs e)
    {
        IEnumerable<ObjectStateEntry> changes = this.ObjectStateManager.GetObjectStateEntries(
                                                    EntityState.Added | 
                                                    EntityState.Deleted | 
                                                    EntityState.Modified);
        TestEntities context = sender as TestEntities;

        foreach (ObjectStateEntry stateEntryEntity in changes)
        {
            if (!stateEntryEntity.IsRelationship && stateEntryEntity.Entity != null)
            {
                Audit audit = new Audit
                {
                    AuditID = Guid.NewGuid()
                };

                foreach (var relationship in stateEntryEntity.RelationshipManager.GetAllRelatedEnds())
                {
                    var parent = stateEntryEntity.RelationshipManager.GetRelatedCollection<EntityObject>(relationship.RelationshipName, relationship.TargetRoleName);
                    audit.Decription =
                        string.Format("{0} changed on {1} with id of {2}",stateEntryEntity.Entity, parent.GetType().Name);
                }

                context.AddToAudits(audit);

            }
        }
    }

}

Но я получаю следующее.

An EntityCollection of EntityObject objects could not be returned for role name 
'Canine' in relationship 'TestModel.FK_CANINE'. Make sure that the 
EdmRelationshipAttribute that defines this relationship has the correct 
RelationshipMultiplicity for this role name. For more information, see the 
Entity Framework documentation.

Мне интересно, если, возможно, я подхожу к этому пути.

1 Ответ

0 голосов
/ 15 ноября 2011

После поиска невозможно сделать то, что я хотел с EF.Я хотел сканировать дерево наследования для целей аудита.Я закончил тем, что создал интерфейс Auditor, который регистрирует сообщение аудита.Я создал реализации Auditor для каждого типа сущности EF, который я хотел проверить.Когда вызывающий код запросил класс, в котором реализован интерфейс Auditor, я использовал именованные сопоставления из Microsoft Unity, чтобы внедрить конкретный класс или избежать аудита, если сопоставление не найдено.

...