BEGIN TRANSACTION [Tran1]
BEGIN TRY
INSERT INTO [Test].[dbo].[T1] ([Title], [AVG])
VALUES ('Tidd130', 130), ('Tidd230', 230)
UPDATE [Test].[dbo].[T1]
SET [Title] = N'az2' ,[AVG] = 1
WHERE [dbo].[T1].[Title] = N'az'
COMMIT TRANSACTION [Tran1]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION [Tran1]
SELECT @ErrorMessage = 'Lỗi: ' + ERROR_MESSAGE()
RAISERROR(@ErrorMessage, 16, 1)
END CATCH
Thứ Sáu, 30 tháng 7, 2021
Transaction SQL
Move connection string into code
using System.Data.SqlClient;
using System.Data.EntityClient;
namespace MY_DB_ORM
{
static class MY_DB
{
public static string ConnectionString()
{
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
// Set the properties for the data source.
sqlBuilder.DataSource = "MY_SERVER_IP,1433";
sqlBuilder.InitialCatalog = "MY_DB_NAME";
sqlBuilder.UserID = "MY_USERID";
sqlBuilder.Password = "MY_PASSWORD";
sqlBuilder.IntegratedSecurity = false;
// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = "System.Data.SqlClient";
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/MY_CONTEXT_CLASS_NAME.csdl|
res://*/MY_CONTEXT_CLASS_NAME.ssdl|
res://*/MY_CONTEXT_CLASS_NAME.msl";
return entityBuilder.ToString();
}
}
}
Then in my context class I could alter the constructor to use this method..
public partial class MY_CONTEXT_CLASS_NAME : DbContext
{
public MY_CONTEXT_CLASS_NAME_CONSTRUCTOR()
: base(MY_DB.ConnectionString())
{
}
Now I am able to remove the connection string to my model from the app.config file where it was held in clear text for all to see!
https://community.spiceworks.com/topic/815431-ef-can-t-get-it-to-workThứ Ba, 27 tháng 7, 2021
The difference between break and yield break
Thứ Sáu, 2 tháng 10, 2020
Đưa con trai vào sòng bạc và bài học cuộc đời
"Khi nào con đủ 23 tuổi, ta sẽ giao lại cả cơ nghiệp này cho con", vua tàu biển Harry của nước Mỹ tuyên bố với cậu con trai "Harry nhỏ" của mình như vậy. Nhưng chẳng ai ngờ, đến ngày sinh nhật lần thứ 23 của con trai, ông lại đưa cậu vào sòng bạc…
Một trải nghiệm đáng nhớ
Trong ánh mắt thảng thốt, ngạc nhiên của Harry, ông dúi vào tay cậu 2000 đô la. Liền sau đó, ông dạy cho Harry tất cả các mánh khóe trên bàn bài, dạy một cách thản nhiên và lạnh lùng đến kỳ lạ. Sau cùng, ông nói với cậu một câu thế này: "Dù có bất cứ chuyện gì xảy ra, con cũng không được để thua hết sạch tiền".
Harry gật đầu vâng dạ nhưng cha của anh vẫn không yên tâm. Ông nói: "Hãy hứa với ta là con phải giữ được 500 đô la sau khi bước chân ra khỏi đây". Harry tự tin vỗ vào ngực mình, hứa hẹn chắc nịch: "Con sẽ làm được, cha không phải dặn dò nhiều!".
Tuy nhiên khi bước vào sòng bạc, ngồi vào bàn chơi, cậu chàng Harry mau chóng bị thôi miên bởi ma lực của những viên xúc xắc, những lá bài. Cậu điên cuồng đặt cửa như con thiêu thân, quên sạch lời cha dặn và lời hứa của mình lúc trước. Chẳng bao lâu sau, Harry thua sạch không còn một đồng.
Cậu chán nản, lê từng bước nặng nhọc ra khỏi sòng bài. Cậu đã tưởng rằng hai ván cuối, nước bài đã đẹp hơn, có thể gỡ lại số vốn ban đầu. Nào ngờ, kết quả còn tồi tệ hơn làm vậy!
Cha của Harry trông thấy con trai của mình mặt mày ủ dột, vẫn điềm tĩnh nói: "Con phải quay trở lại đó một lần nữa". Rồi ông đột nhiên hạ giọng: "Nhưng lần này ta sẽ không thể cho con thêm một đồng nào nữa. Con sẽ phải tự kiếm lấy những đồng tiền bằng chính mồ hôi nước mắt của mình".
Khó khăn lắm, Harry mới tìm được một công việc làm thêm. Trong suốt một tháng làm lụng vất vả sau đó, Harry kiếm được 700 đô la. Vậy là cậu lại bước chân vào sòng bạc một lần nữa. Lần này Harry tự đặt ra cho mình một quy tắc: Chỉ được chơi đến hết nửa số tiền trong túi, sau đó bằng mọi giá phải rời khỏi bàn.
Thế nhưng, một lần nữa, Harry lại thất bại. Khi đã thua mất nửa số tiền, bàn chân cậu như bị đóng đinh xuống sàn nhà, không thể nhúc nhích. Và cậu đã không thể giữ vững quy tắc ban đầu của chính mình. Ván cuối cùng, cậu đặt cược toàn bộ số tiền còn lại. Hy vọng lóe len rồi lại vụt tắt. Harry tiếp tục trắng tay.
Cha của Harry lúc ấy ngồi bên cạnh, nhìn cậu mà không nói gì. Ra khỏi sòng bạc, Harry tội nghiệp nhướn ánh mắt buồn tuyệt vọng nhìn cha mình và nói: "Con không bao giờ muốn quay lại sòng bài nữa. Với tính cách của con, chắc chắn con sẽ lại thua cho đến đồng xu cuối cùng. Ngay từ đầu, con đã là một kẻ thất bại rồi!".
Nhưng chẳng ngờ, cha của cậu nhất quyết không chịu, bắt Harry phải vào sòng bài một lần nữa. Ánh mắt ông đầy cương nghị, nhìn thẳng vào mắt con trai mình, nói: "Sòng bạc là nơi khốc liệt và tàn nhẫn nhất thế giới. Cuộc sống này cũng giống như một sòng bạc lớn vậy. Làm sao mà con có thể bỏ cuộc được đây?".
Để có tiền, Harry lại phải cật lực kiếm việc làm thêm. Nửa năm sau, lần thứ ba Harry bước vào sòng bạc. Lần này vận đen vẫn đeo bám cậu không dứt, lại là một thất bại nữa. Nhưng khác với hai lần trước, Harry đã bình tĩnh hơn rất rất nhiều. Khi thua một nửa số tiền, cậu nhất quyết bước ra khỏi sòng bạc. Dù thua một nửa tiền nhưng trong lòng Harry dâng lên cảm giác của một người chiến thắng. Lần này, anh đã tự đánh bại được chính mình.
Cha của Harry nhìn thấy niềm vui trong ánh mắt của con trai mình. Ông nói với cậu: "Con nghĩ rằng vào sòng bài là để thắng bạc sao? Không! Con phải học cách chiến thắng bản thân mình trước. Khi có thể kiểm soát chính mình, con mới là kẻ chiến thắng thực sự".
Khi đang giành chiến thắng, bạn có thể giữ vững nguyên tắc?
Từ đó về sau, mỗi lần vào sòng bạc, Harry đã tự tạo cho mình được một nguyên tắc: Khi mất 10% số tiền trong người, cậu nhất định sẽ rút khỏi bàn. Dần dần, Harry dường như đã thích nghi thực sự với cuộc chơi và bắt đầu có chiến thắng đầu tiên. Không chỉ giữ chắc được số tiền mang theo người, cậu còn thắng được mấy trăm đô la nữa.
Lần ấy, cha cậu đứng bên và cảnh báo Harry rằng đây là lúc nên rời khỏi bàn. Nhưng chiến thắng đầu tiên quả thực quá ngọt ngào, làm sao Harry có thể bỏ cuộc dễ dàng như vậy chứ? Thêm vài ván nữa, Harry lại thắng được số tiền lớn hơn. Tiền trong tay cậu sắp tăng gấp đôi. Đó thực sự là chuyện chưa từng có. Harry càng trở nên phấn khích và bỏ ngoài tai mọi lời khuyên can từ cha mình. Nhưng chẳng ngờ, ở những ván sau, tình thế bắt đầu xấu dần đi. Các đối thủ bắt đầu tăng tiền cược của mình lên gấp nhiều lần. Harry trắng tay chỉ sau vài ván.
Bấy giờ Harry như người mất hồn, vừa sốc vừa bàng hoàng, khắp người đổ mồ hôi lạnh. Lẽ ra cậu đã có thể là kẻ thắng cuộc nếu khôn ngoan làm theo lời khuyên của cha mình. Nhưng bây giờ thì cơ hội chiến thắng đã mãi mãi vuột mất, còn cậu một lần nữa trở thành kẻ thất bại. Thật cay đắng làm sao!
Một năm sau, Harry mới lại tới sòng bạc lần nữa. Harry ngây thơ của ngày xưa giờ đã đầy mình kinh nghiệm, dạn dày sương gió. Dù thắng hay thua, chỉ cần vượt quá 10% số tiền trong túi là cậu sẽ lập tức đứng dậy, rời khỏi sòng bạc. Ngay cả khi đang thắng giòn giã với những nước bài vô cùng sáng sủa, cậu cũng không để cảm xúc lấn át lý trí.
Cha của Harry thầm vui mừng. Bởi ông biết, trên thế giới này, những người có thể dừng lại trong khi đang ở đỉnh cao chiến thắng mới chính là những kẻ chiến thắng thực sự. Một hôm, ông gọi Harry lên và nói: "Ta sẽ giao toàn bộ cơ nghiệp tỷ đô này cho con!". Harry vô cùng ngạc nhiên, lắp bắp: "Nhưng… nhưng con còn chưa có chút hiểu biết nào về kinh doanh cả!". Cha của cậu thư thái trả lời: "Kinh doanh không phải chuyện quá to tát. Có biết bao thương nhân trên thế giới đã thất bại không phải vì họ không hiểu chuyện làm ăn mà chính là bởi họ không thể kiểm soát được cảm xúc và ham muốn của mình".
***
Vượt qua chính mình bao giờ cũng là cuộc chiến khốc liệt nhất, căng thẳng nhất mà cũng vinh quang nhất. Người ta sống trên đời, lòng đầy ham muốn, chuyện gì cũng có thể làm để thỏa mãn ích lợi cá nhân. Cho nên nói dục vọng không giới hạn chính là kẻ thù nguy hiểm nhất của đời người cũng chẳng sai. Dục vọng vừa phải, những phấn đấu cá nhân chính đáng, đương nhiên là liều thuốc kích thích hữu hiệu cho sự thăng tiến của bản thân. Nhưng dục vọng điên cuồng, những truy cầu mê muội lại là thuốc độc hại người.
Đã có biết bao người dành cả cuộc đời theo đuổi công danh, bạc tiền để rồi cuối cùng chết vì cái danh, cái lợi? Nó cũng từa tựa như những người ngậm ngải tìm trầm, lang thang khắp núi thẳm hang hoang tìm cây gỗ quý, cuối cùng phải chịu chết rục nơi nước độc rừng thiêng. Cái bả lợi danh bao đời nay vẫn ngấm ngầm chuốc say, chuốc mê mệt cho những kẻ không thể khống chế bản thân mình.
Người thành công không phải là người ham muốn nhiều nhất. Người thành công là người biết tiết chế cảm xúc tốt nhất. Họ biết khi nào tiến, lúc nào lui, biết khi nào ngẩng cao đầu, lúc nào phải hơi cúi thấp. Họ cũng biết cơ hội đến vào lúc nào và bao giờ phải vượt qua nghịch cảnh khó khăn. Nói chung, họ tự làm chủ được bản thân mình.
Theo cafebiz.
Thứ Bảy, 1 tháng 8, 2020
Hành trình chinh phục Chức vô địch Giải Đầu tư Hoa Kỳ - Mark Minervini
Vào cuối quý đầu tiên, tài khoản của tôi đã tăng 49,72% và nâng lên con số $37.430 từ $25.000 ban đầu. Vào thời điểm ấy, kết quả hàng quý không được công bố nên tôi không biết hiệu suất của mình là như thế nào so với các trader khác. Đến cuối quý II, tôi thực sự đạt được bước tiến của mình. Tài khoản của tôi đã tăng thêm 93,75%, nâng tổng tiền lãi trong 6 tháng của tôi lên +190,08%. Tài khoản giao dịch của tôi trong cuộc thi đạt $72.521 và tôi có cảm giác mình có thứ hạng khá cao so với các đối thủ cạnh tranh.
Ngay sau ngày hôm đó, tôi nhận được một cuộc điện thoại bất ngờ từ một trong những điều phối viên của cuộc thi. Ông nói với tôi rằng cuộc thi bị tạm ngưng do một cuộc điều tra của Ủy ban Chứng khoán và Giao dịch (SEC). Tôi không thể tin được. Tôi đã quyết định tham gia vào cuộc thi USIC vậy mà SEC đã đóng cửa cuộc thi! Tôi đã yêu cầu: "Ít nhất ông có thể nói cho tôi biết tôi đang đứng ở vị trí thứ mấy và tôi đang ở đâu không?" Ông ấy đáp: "Này Mark, anh đã vượt lên dẫn trước hơn 100%". Tôi cảm ơn ông ấy và cúp máy trong sự thất vọng. Tôi đã dẫn trước rất xa và khó có ai có thể bắt kịp tôi, vậy mà giờ đây, cuộc thi đã kết thúc, có lẽ là mãi mãi. Nhưng cũng giống như khi đối mặt với một giao dịch tồi tệ, bạn phải giải quyết sự thất vọng của bản thân và tiếp tục bước tiếp.
Cuối năm đó, tôi nhận được một cuộc gọi khác từ nhà tổ chức cuộc thi, giải thích rằng các vấn đề với SEC đã được giải quyết và cuộc thi đã bắt đầu trở lại. Cuộc thi sẽ tiếp tục vào ngày 01/01/1997. Tuy nhiên, kết quả từ năm 1996 sẽ không được bảo lưu. Mọi thứ sẽ quay trở lại từ đầu nếu tôi tiếp tục tham gia. Hiệu suất hơn 190% trong 6 tháng đầu tiên của tôi chỉ sẽ là miền ký ức của riêng tôi. Cho dù đó là một câu chuyện tuyệt vời nhưng sẽ chẳng có ai được chứng kiến hoặc quan tâm đến.
Các quy tắc mới đã được đặt ra cho cuộc thi vào năm 1997: hai bộ phận; một bộ phận được thiết kế cho các tài khoản giao dịch cá nhân từ $200.000-999.000; và một bộ phận cho các tài khoản quản lý kết hợp từ 1 triệu đô la trở lên; chứ không hạn chế về thị trường giao dịch cho cả hai bộ phận. Các thí sinh được tự do giao dịch cổ phiếu, quyền chọn, hợp đồng tương lai, hoặc bất kỳ kết hợp nào.
Mặc dù điều này nghe có vẻ vô cùng bất công đối với một trader giao dịch chứng khoán thuần túy như tôi khi phải đối đầu với những trader giao dịch quyền chọn và hợp đồng tương lai (có thể sử dụng đòn bẩy lớn), nhưng tôi vẫn quyết định tham gia vào bộ phận đầu tiên, bỏ vào $250.000 để giao dịch. Trong quý đầu tiên, tôi chỉ tăng một xíu, có 8% thôi. Con số này gần như là không đủ điều kiện để leo lên vị trí hàng đầu. Tuy nhiên, lần này, kết quả cuộc thi đã được công bố hàng quý trên Tạp chí Investor's Business Daily. Hàng quý, thế giới có thể theo dõi hiệu suất giao dịch của các đối thủ cạnh tranh hàng đầu.
Trong 2 quý đầu tiên, tôi nằm trong top 20, nhưng phía trước tôi là những đối thủ dẫn trước rất xa. Tôi biết rằng tôi không được để cảm giác bị bỏ lại phía sau ảnh hưởng đến việc giao dịch và làm mờ đi phán đoán của tôi. Tôi đã phải chơi trò chơi theo cách của mình, điều đó có nghĩa là tôi chỉ thực hiện những giao dịch tốt nhất theo những tiêu chí của riêng mình và kiểm soát chặt chẽ mỗi lần thực hiện.
Tiền thật đang được giao dịch, vì vậy, làm một điều gì đó ngu ngốc và mạo hiểm chỉ để giành chiến thắng trong cuộc thi không phải là một lựa chọn khôn ngoan! Tôi đã cam kết ở lại với kế hoạch trò chơi của mình trong suốt cả năm. Đến quý thứ III, mọi thứ đã thay đổi khá nhiều. Bây giờ tôi đã leo lên vị trí đầu tiên, với mức tăng 110,10% và trader ở vị trí thứ hai đứng cách tôi chỉ có 1/10 điểm phần trăm với mức tăng 110,00%. Sau đó, trong quý IV, thị trường điều chỉnh, môi trường giao dịch bây giờ rất khó khăn. Chỉ số Dow đạt đỉnh vào tháng 10 và điều chỉnh 10%. Tuy nhiên đây chính là kịch bản mà tôi hy vọng. Tôi biết rằng trong môt giai đoạn khó khăn, chính tính kỷ luật sẽ giúp tôi thật sự kiếm ra tiền. Đây là điều mà tôi cảm thấy tự tin ít ai có thể đạt được. Trong vài tháng tiếp theo, tôi giao dịch một cách quyết liệt và tổng lợi nhuận cuối cùng của tôi là 155%, gần gấp đôi so với đối thủ gần kề. Tôi rất biết ơn khi được Money Manager Verified Ratings gọi tên là Nhà vô địch Đầu tư Hoa Kỳ năm 1997.
Điểm mấu chốt trong câu chuyện mà tôi vừa kể cho các bạn nghe rất đơn giản. Sân chơi không đồng đều giữa các trader có thể gây áp lực buộc tôi phải chịu quá nhiều rủi ro hoặc giao dịch quá mức. Tôi cũng có thể đã hoang mang khi bị tụt lại phía sau và có thể sẽ phá vỡ các quy tắc của riêng mình. Nhưng tôi đã không làm những điều ấy! Thay vào đó, tôi tập trung vào kế hoạch giao dịch của mình và hai yếu tố cực kỳ quan trọng để giành chiến thắng trong một chặng đường dài, đó chính là: TÍNH NHẤT QUÁN & QUẢN LÝ RỦI RO!
Nỗi đau, Khoái cảm và Thua lỗ - Mark Minervini
Sau nhiều năm đạt được các lợi nhuận siêu khủng, tôi nhận ra rằng bí mật để thành công trong trading là quản lý rủi ro. Nhưng không phải bằng cách vật lộn để thay đổi các hành động của tôi. Tôi làm được điều đó bằng cách thay đổi nhận thức của tôi về nỗi đau và khoái cảm (pain and pleasure).
Thay vì buồn phiền vì cái trade vừa bị dừng lỗ, tôi bắt đầu tìm kiếm khoái cảm trong việc bám theo các quy tắc của tôi và chấp nhận các khoản lỗ nhỏ thâm vào vốn. Trong cùng lúc đó, tôi cố gắng cảm thấy nỗi đau cực đại mỗi khi tôi phá vỡ kỷ luật của mình và khi dính các lệnh lỗ lớn.
Tôi quan niệm rằng tôi phải nên cảm thấy vui và khoái cảm mỗi khi tôi bị dừng lỗ nhỏ trong khi vẫn tuân theo quy tắc của mình; và nên cảm thấy đau đớn mỗi khi tôi bị dừng lỗ lớn (do tôi trade quá lớn) hay phá vỡ quy tắc.
Đó là cảm xúc của tôi, nên tôi muốn kiểm soát nó, những cảm xúc đó phải xuất hiện trong đúng trường hợp. Tôi không muốn cảm thấy đau đớn khi gặp các lệnh lỗ nhỏ nữa.
Với tư duy mới này, tôi có thể thấy các lệnh lỗ nhỏ là 1 cơ hội để tránh các lệnh lỗ lớn mang tính sát thương cao hơn. Điều này giúp tôi kiểm soát rủi ro luôn ở mức thấp và giữ được lợi thế của mình. Đó là 1 bước ngoặt lớn trong nghề trading của tôi. Và điều đó xảy ra khi tôi chuyển đổi quan niệm của mình về nỗi đau và khoái cảm.
Khi cảm nhận về nỗi đau-khoái cảm thay đổi, ta đưa ra các quyết định hoàn toàn khác, và trải nghiệm của ta, thậm chí cảm xúc của ta, cũng thay đổi theo. Và quan trọng hơn, nó không chỉ đơn giản là xảy ra, mà là ta quyết định nó sẽ xảy ra như vậy.
Sức mạnh của bạn nằm ở việc bạn có thể coi 1 việc đau đớn (như thua lỗ nhỏ) là khoái cảm, và 1 việc bình thường (như phá vỡ kỷ luật) là đau đớn.
Bạn phải quyết định bạn coi cái gì là nỗi đau, và cái gì là khoái cảm. Và rồi những thứ khiến bạn đau khổ sẽ đi qua mà không khiến bạn nao lòng.
Thứ Năm, 23 tháng 4, 2020
ASP.NET MVC: Store Routes in the Database
ASP.NET MVC: Store Routes in the Database
- Posted by Ian Suttle on March 12, 2008
- Filed under .NET 3.5 | .Net Framework | ASP.Net | ASP.Net MVC
So far I’m a huge fan of the ASP.NET 3.5 MVC framework which is currently released as Preview 3. Having worked with primarily Microsoft web frameworks MVC provides a refreshing perspective for what I consider an improved tier separation.
An immediate beef I have with ASP.NET MVC is defining the routes in the Global.asax.cs… I can’t change routes without recompiling and deploying code. I thought it better to configure routes in a more dynamic environment, specifically the database, which is what this post will provide an example for.
I’ve broken the implementation into three main pieces:
- Database schema for storing routes and route default parameters
- LINQ to SQL model for accessing the routes
- Class for handling route routines
Database Schema – “Mvc”
MvcRoutes Table
routeID – the primary key for a route.
routeName – simply for identification purposes. This isn’t used in the app.
routePattern – the URL structure of the route.
routeIsActive – turn your route on or off.
routeOrder – routes are executed on a first match basis. It may be important to order your routes so a more specific pattern is caught first before a more general pattern catches it… similar logic to exception handling.
MvcRoutes Sample Data
MvcRouteParams Table
paramID – the primary key and identifier for the route parameter.
routeID – foreign key to the MvcRoutes.RouteID value.
paramKey – route defaults are stored as a Dictionary. This is the key for a default.
paramValue – the default value for the paramKey.
paramConstraint – a regular expression value specifying allowed values for the parameter
paramDataType – I’m actually not using this right now but it feels right to analyze the expected data type in a more complete sample… or somethingJ.
MvcRouteParams Sample Data
LINQ to SQL Model
The model is super simple… connect to your MVC routing database and drag the MvcRoutes and MvcRouteParams tables to a new LINQ to SQL class.Now we can do some simple queries.
Route Helper Class – Routing.cs
The Routing.cs class provides a handful of methods for working with the RouteTable and interaction with the database. In my project I included a new controller to handle resetting and displaying the routes which utilizes some of these additional methods.using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web.Routing;
using MvcAltRouting.Models;
namespace MvcAltRouting
{
internal class Routing
{
public static RouteCollection Routes
{
get { return RouteTable.Routes; }
}
/// <summary>
/// Gets the configured routes.
/// </summary>
/// <returns></returns>
public static List<MvcRoute> GetConfiguredRoutes()
{
MvcRoutesDataContext db = new MvcRoutesDataContext();
List<MvcRoute> dbRoutes = (from b in db.MvcRoutes
where b.routeIsActive == true
orderby b.routeOrder
select b).ToList();
return dbRoutes;
}
/// <summary>
/// Clears current and readds application routes.
/// </summary>
public static void ResetAppRoutes()
{
Routes.Clear();
SetAppRoutes();
}
/// <summary>
/// Sets the application routes.
/// </summary>
public static void SetAppRoutes()
{
List<MvcRoute> configuredRoutes = GetConfiguredRoutes();
SetAppRoutes(configuredRoutes);
}
/// <summary>
/// Sets the application routes.
/// </summary>
/// <param name="configuredRoutes">Collection of routes to add to the application's routing table.</param>
public static void SetAppRoutes(List<MvcRoute> configuredRoutes)
{
//add the routes to the RouteCollection
foreach (MvcRoute route in configuredRoutes)
{
//create RouteValueDictionary objects to add the default values and contraints to the route
RouteValueDictionary constraints = new RouteValueDictionary();
RouteValueDictionary routeVals = new RouteValueDictionary();
foreach (MvcRouteParam param in route.MvcRouteParams)
{
routeVals.Add(param.paramKey, param.paramValue);
if (!string.IsNullOrEmpty(param.paramConstraint))
{
constraints.Add(param.paramKey, param.paramConstraint);
}
}
//create the route using the defaults set above
RouteTable.Routes.Add(new Route(route.routePattern, new MvcRouteHandler())
{
Defaults = routeVals,
Constraints = constraints
});
}
}
}
}
Global.asax.cs
Lastly change the Application_Start method to use the new Routing class to populate the application routes, removing the need for the routes defined within the Global.asax.cs.using System;
namespace MvcAltRouting
{
public class GlobalApplication : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Routing.SetAppRoutes();
}
}
}
That’s It!
Start up the provided project and navigate to the “Display Routes” link. You can see the routes have been set from the database values we saw from above!Have you been working with the ASP.NET MVC framework? If so have you moved the route configuration out of the Global.asax.cs or are you happy with the default configuration for editing routes?
Download the sample MVC project for this postNOTE: You should have ASP.NET MVC Preview 3 or later installed to run the provided download.

