NHibernate.Mapping.ByCode отношения «многие ко многим» - PullRequest
1 голос
/ 24 января 2012

Я создал 2 объекта:

public class Set
{
    public Set()
    {
        _sorts = new List<Sort>();
    }
    public virtual int Id { get; set; }
    public virtual string Code { get; set; }
    private ICollection<Sort> _sorts;
    public virtual ICollection<Sort> Sorts
    {
        get { return _sorts; }
        set { _sorts = value; }
    }
}

public class Sort
{
    public Sort()
    {
        _sets = new List<Set>();
    }
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    private ICollection<Set> _sets;
    public virtual ICollection<Set> Sets
    {
        get { return _sets; }
        set { _sets = value; }
    }
}

И 2 сопоставления:

public class SetMapping: ClassMapping<Set>
    {
        public SetMapping()
        {
            Table("Sets");
            Id(x => x.Id, map => map.Generator(IdGeneratorSelector.CreateGenerator()));
            Property(x => x.Code, map =>
            {
                map.Length(50);
                map.NotNullable(false);
            });
            Bag(x => x.Sorts, map =>
            {
                map.Key(k =>
                {
                    k.Column("SetId");
                    k.NotNullable(true);
                });
                map.Cascade(Cascade.All);
                map.Table("SetsToSorts");
                map.Inverse(true);

            }, r => r.ManyToMany(m => m.Column("SortId")));
        }
    }

    public class SortMapping: ClassMapping<Sort>
    {
        public SortMapping()
        {
            Table("Sorts");
            Id(x => x.Id, map => map.Generator(IdGeneratorSelector.CreateGenerator()));
            Property(x => x.Name, map =>
            {
                map.Length(50);
                map.NotNullable(false);
            });
        }
    }

использование: Набор может иметь много видов. Сортировка может принадлежать многим наборам.

И я хотел бы использовать это как:

var set = new Set() {Code = "001"};
            var sort = new Sort {Name = "My name"};

            set.Sorts.Add(sort);
            sort.Sets.Add(set);

Каким-то образом отношения еще не работают, потому что, когда я пытаюсь использовать приведенный выше код для добавления сортировки, например, для установки и фиксации, я непросмотреть записи, сохраненные в связанной таблице SetsToSorts.

Кто-нибудь знает, что мне не хватает в моем отображении?Или иначе делаешь неправильно?

Спасибо, Джуст

1 Ответ

1 голос
/ 24 января 2012

Ваше сопоставление говорит о том, что коллекция Сорта Set является обратной (map.Inverse (true)). Это означает, что другая сторона двунаправленной ассоциации отвечает за постоянные изменения. Но ваше сопоставление классов Sort не имеет сопоставления коллекции. Удалите map.Inverse (true) в SetMapping или добавьте необратимое сопоставление коллекции в SortMapping.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...