2009-06-17 122 views
1

我使用FluentNHibernate,并已做了许多一对多的映射,但是当我尝试保存我的实体,我得到以下错误:中止由于违反约束列的GroupId,IDX不是唯一

NHibernate.Exceptions.GenericADOException: NHibernate.Exceptions.GenericADOException 
: could not insert collection: [Test.Entities.Recipient.Groups#b6815d34-f436-4142-9b8e-1bfcbf25509e][SQL: SQL not available] 
---- System.Data.SQLite.SQLiteException : Abort due to constraint violation 
columns GroupId, idx are not unique 

这里是我的映射:

public class GroupMap : ClassMap<Group> 
{ 
    public GroupMap() 
    { 
     Id(x => x.Id).GeneratedBy.Guid(); 
     Map(x => x.Name); 
     Map(x => x.SenderName); 
     Map(x => x.Created); 
     HasManyToMany(x => x.Recipients) 
      .AsList() 
      .WithTableName("groups_recipients") 
      .WithParentKeyColumn("GroupId") 
      .WithChildKeyColumn("RecipientId") 
      .LazyLoad() 
      .Cascade.AllDeleteOrphan(); 
    } 
} 

public class RecipientMap : ClassMap<Recipient> 
{ 
    public RecipientMap() 
    { 
     Id(x => x.Id).GeneratedBy.Guid(); 
     Map(x => x.Firstname); 
     Map(x => x.Lastname); 
     Map(x => x.Phone); 
     Map(x => x.Email); 
     HasManyToMany(x => x.Groups) 
      .AsList() 
      .WithTableName("groups_recipients") 
      .WithParentKeyColumn("RecipientId") 
      .WithChildKeyColumn("GroupId") 
      .LazyLoad().Cascade.None(); 
    } 
} 

这个问题似乎有事情做与关系表ID,但我无法弄清楚如何解决它。

干杯, nandarya

+0

首先,您可以将show_sql设置为true :)调试时帮助很多..提示打印到debut.out窗口中:http://social.msdn.microsoft.com/Forums/en-US/ linqtosql/thread/6ebcfadf-042d-4295-8902-5b3e039ab1b5 – cwap 2009-06-17 12:00:18

+0

其实我有“SQLiteConfiguration.Standard.InMemory().ShowSql()”设置,所以我应该得到的SQL。但在我得到的错误消息: [SQL:SQL不可用] – nandarya 2009-06-17 12:26:21

回答

1

使用AsList()是不是一个好主意。应该是AsBag()。一切似乎都奏效。

相关问题