不会保存到数据库的GUID ID-流畅,nhiberate(wont save to databas

2019-10-17 17:15发布

我有问题,节省当我使用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();
    } 

Answer 1:

ID(X => x.Id).ColumnName( “ID”)。GeneratedBy.Assigned()

也可能需要.WithUnsavedValue(Guid.Empty),但我不知道。 你可能需要告诉NHibernate的使用保存或更新(不SaveOrUpdate)每一次,反正。 不是一个大的专家在这里...但你需要使用.Assigned()是肯定的。



Answer 2:

你没有添加GeneratedBy.Guid(),它会工作得很好也尝试使用GeneratedBy.GuidComb(); 它使用的GUID时recomended



Answer 3:

您可以在数据库中插入实体之前产生的GUID。 那好处是实体之前,并在数据库persitence后是相同的。 这使得它更容易忽略代码数据库。

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产生的GUID()



文章来源: wont save to database with guid as id- fluent-nhiberate