不会使用guid作为id-fluent-nhibernate保存到数据库

时间:2009-09-26 16:37:12

标签: .net nhibernate fluent-nhibernate nhibernate-mapping

当我使用Guid作为标识符时,我遇到了保存问题。能够 任何人,我在这里失踪了什么?我创建自己的guid所以我不希望它由数据库生成。

注意:我已经尝试将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();
    } 

3 个答案:

答案 0 :(得分:2)

Id(x =&gt; x.Id).ColumnName(“Id”)。GeneratedBy.Assigned()

另外。可能需要使用UnwedavedValue(Guid.Empty),但我不确定。无论如何,您可能需要告诉NHibernate每次都使用Save或Update(而不是SaveOrUpdate)。这里不是一个大专家......但你需要使用.Assigned()肯定。

答案 1 :(得分:0)

你不必添加GeneratedBy.Guid()它也可以正常使用GeneratedBy.GuidComb();建议使用guid

答案 2 :(得分: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或类似Guid.NewGuid()

的guid