2013-01-21 25 views
10

Tôi có một câu hỏi về hành vi tùy chọn en en Cascade khi sử dụng Ánh xạ NHibernate theo Mã.Lập bản đồ NHibernate theo mã (Loquacious) - Tùy chọn Cascade

tùy chọn Enum đã sau:

[Flags] 
public enum Cascade 
{ 
    None = 0, 
    Persist = 2, 
    Refresh = 4, 
    Merge = 8, 
    Remove = 16, 
    Detach = 32, 
    ReAttach = 64, 
    DeleteOrphans = 128, 
    All = 256, 
} 

Họ đang dự định sẽ được sử dụng như kết hợp chút cờ (như xa như tôi có được nó).

Tôi đã nhìn qua tài liệu hướng dẫn NHibernate, và các tùy chọn cascade sau cho ánh xạ XML được định nghĩa đó: Lifecycles and object graphs

bất cứ ai có thể miêu tả tùy chọn thác từ bản đồ Nhibernate mới bằng cách mã? Một nửa trong số đó là tự mô tả, một nửa khác thì không.

+0

không tự mô tả? – Firo

+0

Tôi không chắc chắn. Persist = Lưu-Cập nhật, Làm mới? Hợp nhất? Xóa = Xóa, Tách =? ReAttach =? DeleteOrphans = xóa-mồ côi, Tất cả = tất cả. – Cortlendt

+0

Tôi đồng ý, enum này là một mớ hỗn độn, 'Tất cả' nên thực sự bao gồm tất cả các cờ bitwise ... – Lukazoid

Trả lời

12

Từ src\NHibernate\Mapping\ByCode\Impl\CascadeConverter.cs

private static IEnumerable<string> CascadeDefinitions(this Cascade source) 
    { 
     if (source.Has(Cascade.All)) 
     { 
      yield return "all"; 
     } 
     if (source.Has(Cascade.Persist)) 
     { 
      yield return "save-update, persist"; 
     } 
     if (source.Has(Cascade.Refresh)) 
     { 
      yield return "refresh"; 
     } 
     if (source.Has(Cascade.Merge)) 
     { 
      yield return "merge"; 
     } 
     if (source.Has(Cascade.Remove)) 
     { 
      yield return "delete"; 
     } 
     if (source.Has(Cascade.Detach)) 
     { 
      yield return "evict"; 
     } 
     if (source.Has(Cascade.ReAttach)) 
     { 
      yield return "lock"; 
     } 
     if (source.Has(Cascade.DeleteOrphans)) 
     { 
      yield return "delete-orphan"; 
     } 
    } 

Lưu ý: all thác tất cả trừ delete-orphan.

7
  • Không: không có gì thác
  • Persist = ISession.SaveOrUpdate
  • Refresh = ISession.Refresh: tải trạng thái db của đối tượng vào bộ nhớ và cập nhật thuộc tính của nó
  • Hợp nhất = ISession.Merge: tải đối tượng có cùng Id từ db và cập nhật thuộc tính của nó với các thuộc tính của cá thể đã cho. trả về đối tượng được nạp
  • Remove = ISession.Delete: xóa các ví dụ được đưa ra trong db và tách từ phiên
  • Detach = ISession.Evict: loại bỏ các đối tượng so với phiên/thay đổi theo dõi
  • Reattach = ISession.Lock (LockMode.None): lắp lại dụ chưa sửa đổi được đưa ra với các phiên
  • DeleteOrphans: xóa các đối tượng có liên quan không được tham chiếu bởi phụ huynh
  • Tất cả: tất cả các obove trừ DeleteOrphans (thx để @Stefan Steinegger)
+0

Nó không hoàn toàn chính xác. Xem câu trả lời của tôi. –

Các vấn đề liên quan