Mercurial > pub > bltoolkit
diff Demo/Asp.Net/BusinessLogic/DataAccess/ProfileAccessor.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Demo/Asp.Net/BusinessLogic/DataAccess/ProfileAccessor.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; + +using BLToolkit.Data; +using BLToolkit.DataAccess; + +namespace PetShop.BusinessLogic.DataAccess +{ + using ObjectModel; + + public abstract class ProfileAccessor : AccessorBase<ProfileAccessor.DB, ProfileAccessor> + { + public class DB : DbManager { public DB() : base("ProfileDB") {} } + + [SqlQuery(@" + SELECT + UniqueID + FROM + Profiles + WHERE + Username = @userName AND ApplicationName = @appName")] + public abstract int? GetUniqueID(string @userName, string @appName); + + [SqlQuery(@" + SELECT + UniqueID + FROM + Profiles + WHERE + Username = @userName AND ApplicationName = @appName AND IsAnonymous != @isAuthenticated")] + public abstract int? GetUniqueIDAuth(string @userName, string @appName, bool @isAuthenticated); + + [SqlQuery(@" + INSERT INTO Profiles ( + Username, ApplicationName, LastActivityDate, LastUpdatedDate, IsAnonymous + ) Values ( + @userName, @appName, getdate(), getdate(), CASE WHEN @isAuthenticated = 1 THEN 0 ELSE 1 END + ) + + SELECT SCOPE_IDENTITY()")] + public abstract int CreateProfile(string @userName, string @appName, bool @isAuthenticated); + + [SqlQuery(@" + SELECT + a.FirstName as ToFirstName, + a.LastName as ToLastName, + a.Address1 as Addr1, + a.Address2 as Addr2, + a.City, + a.State, + a.Zip, + a.Country, + a.Email, + a.Phone + FROM + Account a + JOIN Profiles p ON p.UniqueID = a.UniqueID + WHERE + p.Username = @userName AND p.ApplicationName = @appName;")] + public abstract Address GetAccountInfo(string @userName, string @appName); + + [SqlQuery(@" + SELECT + c.ItemId, + c.Name, + c.Type, + c.Price, + c.CategoryId, + c.ProductId, + c.Quantity + FROM + Profiles p + JOIN Cart c ON c.UniqueID = p.UniqueID + WHERE + p.Username = @userName AND + p.ApplicationName = @appName AND + c.IsShoppingCart = @isShoppingCart")] + public abstract IList<CartItem> GetCartItems(string @userName, string @appName, bool @isShoppingCart); + + [SqlQuery(@" + DELETE FROM Account WHERE UniqueID = @uniqueID + + INSERT INTO Account ( + UniqueID, Email, FirstName, LastName, Address1, Address2, City, State, Zip, Country, Phone + ) VALUES ( + @uniqueID, @Email, @ToFirstName, @ToLastName, @Addr1, @Addr2, @City, @State, @Zip, @Country, @Phone + )")] + public abstract void SetAccountInfo(int @uniqueID, Address address); + + // This method is not abstract as BLToolkit does not generate methods for the ExecuteForEach method. + // It's virtual as we want to get statistic info for this method. + // Counter and Log aspects wrap all abstract, virtual, and override members. + // + public virtual void SetCartItems(int uniqueID, ICollection<CartItem> cartItems, bool isShoppingCart) + { + using (DbManager db = GetDbManager()) + { + db.BeginTransaction(); + + db + .SetCommand(@" + DELETE FROM + Cart + WHERE + UniqueID = @uniqueID AND IsShoppingCart = @isShoppingCart", + db.Parameter("@uniqueID", uniqueID), + db.Parameter("@isShoppingCart", isShoppingCart)) + .ExecuteNonQuery(); + + if (cartItems.Count > 0) + { + db + .SetCommand(@" + INSERT INTO Cart ( + UniqueID, ItemId, Name, Type, Price, CategoryId, ProductId, IsShoppingCart, Quantity + ) VALUES ( + @uniqueID, @ItemId, @Name, @Type, @Price, @CategoryId, @ProductId, @isShoppingCart, @Quantity + )", + db.CreateParameters(typeof(CartItem), + db.Parameter("@uniqueID", uniqueID), + db.Parameter("@isShoppingCart", isShoppingCart))) + .ExecuteForEach(cartItems); + } + + db.CommitTransaction(); + } + } + + [SqlQuery(@" + UPDATE + Profiles + SET + LastActivityDate = getdate() + WHERE + Username = @userName AND ApplicationName = @appName")] + public abstract void UpdateActivityDate(string @userName, string @appName); + + [SqlQuery(@" + UPDATE + Profiles + SET + LastActivityDate = getdate(), + LastUpdatedDate = getdate() + WHERE + Username = @userName AND ApplicationName = @appName")] + public abstract void UpdateActivityAndUdpateDates(string @userName, string @appName); + + [SqlQuery(@"DELETE FROM Profiles WHERE UniqueID = @uniqueID")] + [ScalarSource(ScalarSourceType.AffectedRows)] + public abstract int DeleteProfile(int @uniqueID); + + [SqlQuery(@" + SELECT + Username + FROM + Profiles + WHERE ApplicationName = @appName AND LastActivityDate <= @userInactiveSinceDate")] + public abstract IList<string> GetInactiveProfiles(DateTime userInactiveSinceDate, string appName); + + [SqlQuery(@" + SELECT + Username + FROM + Profiles + WHERE ApplicationName = @appName AND LastActivityDate <= @userInactiveSinceDate AND IsAnonymous = @isAnonymous")] + public abstract IList<string> GetInactiveProfiles(DateTime @userInactiveSinceDate, string @appName, bool @isAnonymous); + + const string _profileQuery = @" + FROM + Profiles + WHERE + ApplicationName = @appName AND + (@isAnonymous IS NULL OR IsAnonymous = @isAnonymous) AND + (@userName IS NULL OR Username LIKE @userName) AND + (@userInactiveSinceDate IS NULL OR LastActivityDate >= @userInactiveSinceDate)"; + + [SqlQuery(@" + SELECT @totalRecords = Count(*)" + _profileQuery + @" + SELECT *" + _profileQuery)] + public abstract IList<CustomProfile> GetProfile( + bool? @isAnonymous, string @userName, DateTime? @userInactiveSinceDate, string @appName, out int @totalRecords); + } +}