2009-09-26 46 views
1

我得到保存問題,當我使用Guid作爲標識符。可以 有人問我在這裏失蹤?我創建自己的GUID,所以我不希望它由數據庫生成。不會保存到數據庫與guid作爲ID流利nhiberate

注:我已經嘗試guid.combo映射到沒有任何成功。

public class Order 
{ 
    public virtual Guid Id { get; set; } 
    public virtual ICollection<OrderItem> OrderItems { get; set; } 
    public virtual User User { get; set; } 
    public virtual DateTime? CreateDate { get; set; } 
    public virtual DateTime? ShippedDate { get; set; } 
    public virtual string OrderStatus { get; set; } 

    public Order() 
    { 
     OrderItems = new Collection<OrderItem>(); 
    } 

    public virtual void AddOrderItems(OrderItem orderItem) 
    { 
     orderItem.Order = this; 
     OrderItems.Add(orderItem); 
    } 
} 

OrderMap:

public OrderMap() 
    { 
     Id(x => x.Id).ColumnName("Id").GeneratedBy.Guid(); 

     Map(x => x.CreateDate); 
     Map(x => x.ShippedDate); 
     Map(x => x.OrderStatus); 

     References(x => x.User); 
     HasMany(x => x.OrderItems).Cascade.All().Inverse().LazyLoad(); 
    } 

回答

2

ID(X => x.Id).ColumnName( 「ID」)GeneratedBy.Assigned()

另外.WithUnsavedValue(Guid.Empty)可能需要,但我不確定。無論如何,您可能需要告訴NHibernate每次都使用Save或Update(而不是SaveOrUpdate)。這裏不是一個大的專家......但是你肯定需要使用.Assigned()。

+0

我會嘗試這THX產生的GUID。 – 2009-09-26 22:05:11

+0

不確定關於分配,但當我改變保存和更新,而不是SaveOrUpdate它的工作。 – 2009-09-26 22:11:42

0

你不必添加GeneratedBy.Guid()它將工作得很好也嘗試使用GeneratedBy.GuidComb();在使用guid時建議使用

+0

GeneratedBy.GuidComb();不爲我工作..我已經嘗試忘記提及它。 – 2009-09-26 22:04:30

+0

你能發佈異常嗎? – 2009-09-26 22:09:15

+0

沒有例外..它只是通過,但它不會保存到我的數據庫。但我解決了這個問題,問題是我做了SaveOrUpdate,我將其更改爲Save並且現在可以工作。 thx回覆 – 2009-09-26 22:50:28

0

您可以在將實體插入數據庫之前生成guid。這樣做的好處是實體在數據庫中存在前後相同。它使代碼中的數據庫更容易忽略。

public class Order 
{ 
    public Order() 
    { 
     Id = GuidGenerator.GenerateGuid(); 
    } 

    public Guid Id { get; private set; } 
} 

public class Mapping 
{ 
    Id(x => x.Id).GeneratedBy.Assigned().Access.AsCamelCaseField(); 
} 

GuidGenerator.GenerateGuid()返回由GUID梳算法或者類似的東西Guid.NewGuid()

相關問題