我在C#中使用本地SQLite数据库设置了一个Nhibernate项目,如果在保存我的Nhibernate对象时遇到问题,它告诉我,我的主键不是唯一的,这是正确的但我在我的nhibernate中添加了一个Generator -mapping。
这是班级:
public class Article
{
public virtual int ArticleId { get; set; }
public virtual string Name { get; set; }
public virtual double Price { get; set; }
public virtual string ArticleNumber { get; set; }
public virtual string Description { get; set; }
public virtual Sales Sales {get; set;}
}
这是映射文件:
<class name="Article">
<id name="ArticleId">
<generator class="identity" />
</id>
<property name="Name" />
<property name="Price" />
<property name="ArticleNumber" />
<property name="Description" />
<many-to-one name="Sales" class="Sales" column="SalesId"/>
</class>
我正在创建一些文章,并且我将它添加到Sales,如果我想保存我的销售,它就会得到这个PrimaryKey异常。
是否存在已知问题?
非常感谢,Alex
销售地图:
<class name="Sales">
<id name="SaleId" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Amount" />
<property name="Price" />
<bag name="OrderList" cascade="all">
<key column="ArticleId"/>
<one-to-many class="Article"/>
</bag>
</class>
public class Sales
{
public Sales()
{
if (this.orderList == null)
orderList = new List<Article>();
}
private IList<Article> orderList;
public virtual int SaleId { get; set; }
public virtual double Price { get; set; }
public virtual int Amount { get; set; }
public virtual IList<Article> OrderList
{
get
{
return this.orderList;
}
set
{
this.orderList = value;
}
}
}
答案 0 :(得分:1)
我建议您设置身份映射:
<id name="ArticleId" unsaved-value="0">
<generator class="native" />
</id>
确保PK字段是标识字段。
然后在Sales的映射中:
<many-to-one name="Sales" class="Sales" column="SalesId" insert="true" update="true"/>
您的销售映射也是如此。确保它的id映射的未保存值为0,PK被标记为标识字段。
答案 1 :(得分:0)
问题在于我使用的是交易,没有交易它运作得很好。
感谢Jeffrey Jochum的帮助。