2012-12-05 3 views
0

У меня есть 3 класса:Fluent NHibernate один к одному Сохранить

public class WorkEntity 
{ 
    public virtual int WorkId { get; set; } 
    public virtual OrderExtensionEntity OrderExtension { get; set; } 
} 

public class OrderExtensionEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual WorkEntity Work { get; set; } 
    public virtual IList<IssueInformation> Issues { get; set; } 
} 

public class IssueInformationEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual long WorkId { get; set; } 
} 

Они сопоставляются:

public class WorkMap : ClassMap<WorkEntity> 
{ 
    public WorkMap() 
    { 
     Id(x => x.WorkId).Column("ID_ZLECENIE").GeneratedBy.Sequence("SEQ_TAE_ZLECENIE"); 
     HasOne(x => x.OrderExtension).Constrained(); 
    } 
} 

public class OrderExtensionMap : ClassMap<OrderExtensionEntity> 
{ 
    public OrderExtensionMap() 
    { 
     LazyLoad(); 

     Id(x => x.Id).Column("ID_ZLECENIE").GeneratedBy.Foreign("Work"); 
     HasMany(x => x.IssueInformation).KeyColumn("FK_ZLECENIE"); 
    } 
} 

public class IssueInformationMap : ClassMap<IssueInformationEntity> 
{ 
    public IssueInformationMap() 
    { 
     Id(x => x.Id).Column("ID_ZAD_ROZ_ADRES").GeneratedBy.Sequence("SEQ_ZAD_ROZ_ADRES"); 

     Map(x => x.WorkId).Column("FK_ZLECENIE").Not.Nullable(); 
    } 
} 

Когда я создаю записи в базе данных (Oracle) можно получить всю информацию из таблиц , Но я не могу сохранить OrderExtensionEntity с помощью:

var orderExtension = new OrderExtension(); 
orderExtension._some_variables_like_strings_to_be_saved_ 

Session.SaveOrUpdate(orderExtension) 

Это говорит мне «Нерешенные собственности Работа» и некоторые другие ошибки, если я пытаюсь сделать:

orderExtension.Work = new WorkEntity() { WorkId = 12345 }; 

ответ

0

Попробуйте это отображение. Вот как выглядят отношения друг к другу.

public class WorkMap : ClassMap<WorkEntity> 
{ 
    public WorkMap() 
    { 
     Id(x => x.WorkId).Column("ID_ZLECENIE").GeneratedBy.Sequence("SEQ_TAE_ZLECENIE"); 
     HasOne(x => x.OrderExtension) 
      .Cascade.All(); 
    } 
} 

public class OrderExtensionMap : ClassMap<OrderExtensionEntity> 
{ 
    public OrderExtensionMap() 
    { 
     LazyLoad(); 

     Id(x => x.Id).Column("ID_ZLECENIE").GeneratedBy.Foreign("Work"); 
     HasOne(x => x.Work).Constrained(); 
     HasMany(x => x.IssueInformation).KeyColumn("FK_ZLECENIE"); 
    } 
} 
+0

Nope. Он выбрасывает «Транзакция, по которой выполнялся этот вызов метода, была асинхронно прервана». Может быть, я перехожу от «одного к одному» к «одному-ко-многим» и использую его как «Один»? –

+0

Ну, я не уверен, что понимаю ваш пример выше. Похоже, вы пытаетесь самостоятельно сохранить OrderExtension. OrderExtension не может существовать без объекта Work. Если это не ваше намерение, отображение неверно. Я думаю, вы связали бы свой новый объект OrderExtension с новым рабочим объектом или постоянным рабочим объектом и сохранили бы объект Work. –

+0

Ошибка, описанная выше «Операция ...», не похожа на проблему, связанную с отображением. –

Смежные вопросы