2009-09-26 2 views
1

GUID를 식별자로 사용할 때 저축 문제가 발생합니다. 수 있습니다 아무도 내가 여기에 실종 무엇입니까? 나는 데이터베이스에 의해 생성되고 싶지 않아 그래서 내 자신의 GUID를 만듭니다.guid로 데이터베이스에 저장하지 말 것. id-fluent-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

아이디 (X => x.Id) .ColumnName ("ID") GeneratedBy.Assigned()

또한 .WithUnsavedValue (Guid.Empty) 필요할 수도 있지만 확실하지 않습니다. 당신은 아마도 NHibernate에게 Save or Update (SaveOrUpdate 아님)를 매번 사용하도록 할 필요가있을 것이다. 여기에 큰 전문가는 아니지만 ... .Assigned()를 사용해야합니다.

+0

GUID를 빗 알고리즘 또는 Guid.NewGuid 같은()에 의해 생성 된 GUID를 반환합니다. –

+0

할당 된 내용이 확실하지 않지만 SaveOrUpdate 대신 저장 및 업데이트되도록 변경 한 경우 효과가있었습니다. –

0

GeneratedBy.Guid()를 추가하지 않아도됩니다. GeneratedBy.GuidComb();를 사용하여 잘 작동합니다. guid를 사용할 때 권장됩니다.

+0

GeneratedBy.GuidComb(); 그나 저를 위해 일하지 말라. 나는 이미 그것을 언급하는 것을 잊어 버렸습니다. –

+0

예외를 게시 할 수 있습니까? –

+0

예외는 없습니다. 그냥 통과하지만 내 데이터베이스에 저장하지 않을 것입니다. 하지만 난이 문제를 해결, 문제는 내가 SaveOrUpdate 않았다, 내가 저장 변경하고 지금 작동합니다. 답장을위한 thx –

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은() 내가이 들으을 다할 것입니다

관련 문제