Skip to main content

Posts

Showing posts from 2012

Entity Framework many to many relationship.

In this post I will be demonstrating how you can create many to many relationship between classes by using EF code first approach with DataAnnotation attributes. You can use the EF fluent API as well for many to many configuration which I have not covered here. I will be using the classes post and tag in my model which has many to many relationship between them i.e a single post can have many tags and a single tag can have many posts. To get started with many to many configuration between the post and the tag you have to create the classes first. The EF will automatically create the third table when the application will execute, so you will not be creating the third table manually in the model. Let's get started with the code. public class Post { public long PostID { get; set; } [Required] [MaxLength(255)] public string Title { get; set; } [Required] [MaxLength(4000)] [DataType(DataType.MultilineText)] public string Question { g

Asp.net mvc 3 DataAnnotation using IValidatableObject for multiple properties.

If you have a scenario in which you want to base a validation on multiple business logics on multiple properties then you should consider using IValidatableObject . One of the advantages is that you can use the properties attributes directly which open door to a lot of validation possibilities. It will only be called when there are no individual properties error. It doesn't support clientside validation. Below is the simple code that will give you insight of how this all works. public class User : IValidatableObject { [Key] public string UserId { get; set; } [Required] public string UserName { get; set; } [Required] public string Password { get; set; } [Compare("Password")] public string ConfirmPassword { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { List<ValidationResult> err = new List<ValidationResult&

Asp.net mvc entity framework code first appoach.

Entity Framework comes with three approaches for development. 1) Database First: In this approach you already have your database and the entity framework will generate the model for you. 2) Model First: You don't have the database in this approach and you manually create the domain model using the entity framework designer. After creating the model the designer will generate the ddl statement which will be used to create the database. 3) Code First which I am covering in this post was introduced in EF 4.1. Code first allows you to create the domain model in the code without using the designer. After that EF will be generating the database for you. This approach is used only if you don't have the database the first time. If the database exists use the first approach. So here how the things goes. public class User { [Key] public int UserID { get; set; } [Required] public string UserName { get; set; } [Required] public string Password { get; set;

Asp.net mvc DataAnnotation ValidateAttribute two properties comparison.

Using Datannotion is great but there are scenarious in which the current attributes compare, range etc becomes inadequate especially for the comparisions. So we create here our own custom validation using ValidationAttribute class which is the base class for all the annotation attributes. So by deriving from it and overriding the Isvalid method we can create our custom attribute for the model. So here is the scenario in which I will be validating the Username against the password which should not be equal. Compare attribute cannot be used in this scenario so I have created a custom attribute for that. Here is the model with the attribute. User View Model [CompareUserPass("UserName", "Password", ErrorMessage = "UserName and password cannot be equal")] public class UserView { [Required(ErrorMessage = "UserName Required")] public string UserName { get; set; } [Required(

Asp.net mvc model binding security.

One of the thing that makes asp.net.mvc so interesting is default model binding. Model binding in simple words allows you to take the posted form data from the view and bind it to the action method's parameter in the controller without any fuss. But there is a security flaw in model binding which everyone using asp.net mvc should know .The problem is, in asp.net mvc controller you cannot be sure what you got as the posted value from the view because it is absolutely possible that an extra property, or an overwritten property which you don't want get passed to the controller which could spell disaster. And in the controller if the property matches the orginal property then the things could get out of hand. Here's a simple scenario to understand more what I have defined. A person filling a create user form to become the member of the website requiring some payment in the process passed an Isenabled=true property (which we all have) and unfortunately there is a match in the mo

Asp.net mvc using AutoMapper simplified.

Most of the time in the real world applications it is not possible to map the database model to your presentation view directly because of the fact you may need some additional fields in your view. Using view Data or Viewbag is not always the good idea as it may make things harder or less elegant which are much easier to do. We are creating the User create view as an example here in which confirm password field is additional field in the view and it has nothing to do with the database model. So in this case you would create one model for the database fields as usual and one extra model for the view. The problem is that in the controller you have to map each property from your model for the database to the model for the view manually which shouldn't be done because it is not a good practice as there is a tool for that. The third party tool the Automapper solves this problem by automatically mapping your view model which you get from the view in the controller to the database mod

Asp.net mvc using JsonResult

Json has become one of the most popular form of data interchange method and being tightly integrated in the mvc framework makes it very easy to use. I will be demonstratating a very usefull technique of passing a response in an Ajax style using JsonResult (It is a class that is used in mvc framework to pass a json formatted content to the response). Model public class Users { public int UserId { get; set; } public string UserName { get; set; } } Controller public ActionResult Index() { return View(); } public JsonResult GetUsers() { List<Users> users = new List<Users>() { new Users { UserId =1, UserName ="kaunain" }}; return this.Json(users,JsonRequestBehavior.AllowGet); } View <script type="text/javascript" language="javascript"&

Using c# stopwatch class (System.Diagnostics Namespace).

If you want to compare two or more piece of code in your application for time taken this is the way to do it. Stopwatch s1 = new Stopwatch(); s1.Start(); IEnumerable<Users> User = get(); var p = User.Where(m => m.int_UserId > 560); foreach (var UserList in p) { // Console.WriteLine(UserList.int_UserId); } s1.Stop(); Console.WriteLine(s1.ElapsedMilliseconds); ////////////////////////////Process 2//////////////////////// Stopwatch s2 = new Stopwatch(); s2.Start(); IQueryable<Users> Userf = geti(); var pe = Userf.Where(m => m.int_UserId > 560); foreach (var UserList in pe) { // Console.WriteLine(UserList.int_UserId); } s2.Stop(); Console.WriteLine(s2.ElapsedMilliseconds);

Asp.net mvc 2 sending Json request to external url and returning value from it.

$(document).ready(function () { $("#Submit1").click(function () { var txtvalue= $("#txtvalue").val(); var txtvalue2= $("#txtvalue2").val(); var urlStr = "&txtvalue=" + txtvalue+ "txtvalue2=" + txtvalue2; $.getJSON("http://localhost:5555/Home/Index?format=json&callback=?" + urlStr, function (data) { alert(data); }); }); }); The important point of note here is that you will not be going to get back any value due to the restriction by the browser to stop the xss without specifying callback=? in the url which will result in JsonP call (not a plain JSON call) which is used for calling the external urls. Method which is going to serve the json request. public ActionResult Index(FormCollection form) { var data = new { Value ="true"}; return Json(data,JsonRequestBehavior.AllowGet); } Use jquery 1.5 or greater version.

How to Remove httpruntime Cache in c#

var enumerator = HttpRuntime.Cache.GetEnumerator(); Dictionary<string, object> cacheItems = new Dictionary<string, object>(); while (enumerator.MoveNext()) cacheItems.Add(enumerator.Key.ToString(), enumerator.Value); foreach (string key in cacheItems.Keys) HttpRuntime.Cache.Remove(key);

Linq syntax for sql's not in and in

For In here how it goes var Userlist = new List<Int32> { 560, 561, 511, 611 }; var User= context.GetTable<Users>(); var q = (from p in User where Userlist.Contains(p.int_UserId) select p); For Not In here how it goes var Userlist = new List<Int32> { 560 }; var User= context.GetTable<Users>(); var q = (from p in User where !Userlist.Contains(p.int_UserId) select p);

Using Linq DefaultIfEmpty() extension method

By Using DefaultIfEmpty() extension method you can check the sequence for empty and return something for it and do some manipulation on it afterwards. For example var numbers = new int[] {1,2,3,4,5,6,7}; Console.WriteLine(numbers.DefaultIfEmpty().Sum()); If the sequence is empty it will return 0 otherwise it will sum and return that. By Default if you want to return some value other then 0 it will return that as well Console.WriteLine(numbers.DefaultIfEmpty(100).Sum()); In this case it will return 100 if the sequence is empty.