首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

XPO ORM 實戰入門:一對多關聯、CRUD 與 Session 管理

     編輯:關於ASP.NET

為什麼選擇 XPO?

  • DevExpress 出品,Visual Studio 深度集成
  • 無 XML 映射文件,特性驅動映射
  • 自動建表、遷移、連接池管理
  • LINQ 查詢原生支持,Criteria API 強大

領域模型定義

[Persistent("Users")]
public class User : XPObject {
    public User(Session session) : base(session) { }
    
    string _accountName, _realName, _userPwd = "U";
    [Size(50)] public string AccountName { get => _accountName; set => SetPropertyValue(nameof(AccountName), ref _accountName, value); }
    [Size(50)] public string RealName { get => _realName; set => SetPropertyValue(nameof(RealName), ref _realName, value); }
    [Size(100)] public string UserPwd { get => _userPwd; set => SetPropertyValue(nameof(UserPwd), ref _userPwd, value); }
    
    [Association("User-Details")]
    public XPCollection Details => GetCollection(nameof(Details));
}

[Persistent("UserDetails")]
public class UserDetail : XPObject {
    public UserDetail(Session session) : base(session) { }
    
    string _accountName, _address;
    [Size(50)] public string AccountName { get => _accountName; set => SetPropertyValue(nameof(AccountName), ref _accountName, value); }
    [Size(200)] public string Address { get => _address; set => SetPropertyValue(nameof(Address), ref _address, value); }
    
    [Association("User-Details")]
    public User User { get; set; } // 反向導航
}

核心操作模式

新增(含關聯)

using (var uow = new UnitOfWork()) {
    var user = new User(uow) { AccountName = "zhangsan", RealName = "張三" };
    user.Details.Add(new UserDetail(uow) { Address = "北京市朝陽區" });
    user.Details.Add(new UserDetail(uow) { Address = "上海市浦東區" });
    uow.CommitChanges(); // 事務提交
}

查詢(LINQ + Criteria)

// LINQ
var users = from u in session.Query() 
            where u.AccountName.StartsWith("zhang") 
            select u;

// Criteria 複雜條件
var criteria = CriteriaOperator.Parse("AccountName LIKE 'zhang%' AND Details[].Address CONTAINS '北京'");
var users = session.GetObjects(criteria);

修改與刪除

// 修改
user.RealName = "李四"; uow.CommitChanges();

// 刪除(級聯由 Association 控制)
uow.Delete(user); uow.CommitChanges();

Session/UnitOfWork 最佳實踐

  • Web 請求範圍:HttpContext.Current.Items["XpoSession"] 單例
  • 後台任務:using (var uow = new UnitOfWork()) 短生命周期
  • 避免長 Session 持有鎖,及時 CommitChanges() 或 Rollback()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved