Реализовать свойство навигации в классе c # - PullRequest
1 голос
/ 07 октября 2011

У меня есть 2 сущности, каждый с соответствующим классом c #. Я установил свойство навигации в таблица A , чтобы оно содержало ссылку на многие элементы в таблица B . Когда я создаю новую таблицу A объекта класса , мне нужно иметь возможность создать коллекцию таблицы B объектов в таблице A . Как настроить свойство навигации в таблице A c # class?

DataModel: http://bluewolftech.com/mike/mike/datamodel.jpg

1 Ответ

1 голос
/ 07 октября 2011

Свойства навигации просты в EF. Пример ниже показывает, как будет выглядеть свойство навигации:

public class Foo
{
    public int FooId { get; set; }
    public string SomeProperty { get; set; }

    public virtual IEnumerable<Bar> Bars { get; set; }
}

Где Foo представляет таблицу A, а Bar представляет таблицу B. Ключевым словом для свойства навигации является виртуальное, которое по умолчанию включает отложенную загрузку. Предполагается, что вы используете EF4.1 Code First.

EDIT

Вне моей головы, это должен быть хороший стартовый шаблон для вас:

public class PointOfInterestContext : DbContext
{
    public IDbSet<PointOfInterest> PointOfInterest { get; set; }
    public IDbSet<POITag> POITag { get; set; }
    public IDbSet<Tag> Tag { get; set; }

    public override OnModelCreating(DbModelBuilder modelBuilder)
    {
        // custom mappings go here
        base.OnModelCreating(modelBuilder)
    }
}

public class PointOfInterest
{
    // properties
    public int Id { get; set; }
    public string Title { get; set; }
    // etc...

    // navigation properties
    public virtual IEnumerable<POITag> POITags { get; set; }    
}

public class POITag
{
    // properties
    public int Id { get; set;}
    public int PointOfInterestId { get; set; }
    public int TagId { get; set; }

    // navigation properties
    public virtual PointOfInterest PointOfInterest { get; set; }
    public virtual Tag Tag { get; set; }
}

public class Tag
{
    // properties
    public int Id { get; set; }
    public string TagName { get; set; }
    // etc...

    // navigation properties
    public virtual IEnumerable<POITags> POITags { get; set; }    
}

Тогда вы реализуете другую логику в своих бизнес-объектах. Предполагается, что объекты должны быть легковесными и в большинстве случаев должны иметь атрибуты данных. Я предпочитаю использовать текущие отображения через OnModelCreating.

Вот несколько хороших ссылок:
MSDN - сначала код EF 4.1
Code First Tutorial

...