MVC :: Data Annotation W/ Linq To SQL Generated Classes?
May 14, 2010
Technically I have the Data Annoations working with Linq to SQL classes - the problem is when validation
passes. When UpdateModel() tries to do its thing i can an error:The model of type 'MyProject.Models.Employee' could not be updated.What i did was i created a partial class for Employee (that is generated by linq to sql), then stuck a Meta Data class on top of it for the validation
I am using a model but as I want to have clean views I use the viewmodel approach which is like a downsized model which I map in my controller actions before sending to the view or getting it back in a HttpPost attributed action.
My question is: where to put the data annotation attributes. On the viewmodel classes or on the model? If I get it clearly the viewmodel annotations are used for the client side generation of validation right?
Do does that mean I have to put data annotations everywhere on both model and viewmodel?
I have generated entity framework designer classes . After Generating the designer what is the most nicest and cleanest way to apply data annotation to the properties there . I have 3 classes there
I am new to LINQ. when we drag tables we get a dbml file and designer file.
For example DataClasses1.dbml and DataClasses1.designer.cs.
Once we have them then we can start using our LINQ Queries.
In my company project I do not see this designer files and instead there are .tt files which were used as templates to greate ABC.generated.cs files. Is this same as designer class?
I have an MVC project setup, and I've brought the subsonic Active Record templates into my project, and they generated successfully and I can use the subsonic classes to access my database. However, how do I create a strongly typed view using the subsonic generated classes? When I select "add View" and I check the checkbox to create a strongly-typed view, none of the generated classes from subsonic for my data are available.
I am following the Nerd Dinner tutorial as I'm learning ASP.NET MVC, and I am currently on Step 3: Building the Model. One part of this section discusses how to integrate validation and business rule logic with the model classes. All this makes perfect sense. However, in the case of this source code, the author only validates one class: Dinner.
What I am wondering is, say I have multiple classes that need validation (Dinner, Guest, etc). It doesn't seem smart to me to repeatedly write these two methods in the partial class:
[code]....
This doesn't "feel" right, but I wanted to check with SO to get opinions of individuals smarter than me on this. I also tested it out, and it seems that the partial keyword on the OnValidate method is causing problems (understandably so). This doesn't seem possible to fix (but I could very well be wrong).
I have written a t4 template that basically replaces the work done by StronglyTypedResourceBuilder to give design time access to string resources as properties of classes, one class per resource file. Why? Well I needed to add some customer code that handles string token substitution and a few other customizations. Anyway, the template is working out really well and I may blog on it soon.
In the mean time though, following a common pattern, I have one .resx file for each view, master page, controller, etc. I would really like my t4 template to add a property to each such entity that gives quick access the custom resource class associated with it. For controllers this is easy. T4MVC is ensuring that they are a all declared partial. All I need to do is create the appropriate partial class in my output that declares a readonly property that returns an instance of the appropriate generated resource class.
The Problem:
I would like to do the same thing, inject generated code, into my views. Were this traditional ASP.Net, each .aspx page would have a .aspx.cs page and possibly an .aspx.designer.cs page that are all partial classes extending in the aspx page's class definition. There is no such thing by default in MVC and for good reason. However, I think for my purposes, if there is a way to do this, it would be the way to go.
I could subclass ViewPage and add a generic type parameter and a property that returns the class of that type but that has certain complications. I think adding auto generated code to each view via partial class (that is what partials are for after all) is the way to go.
I have made a basic attempt. I have created a .aspx.cs file for a view and placed a code behind attribute in the page declaration but the class generated from the view seems to reside in a different assembly any my "partial class" ends up as its own class in the same assembly as all my other code.
For no apparent reason (of course there must be one), my web project will no longer generate LINQ to SQL classes/data contexts!!!I am going about the usual routine of right clicking the project, adding new item, selected LINQ to SQL classes, then dragging over a table from Server Explorer, saving and build but no...the bloody thing won't appear!!!Does anyone know why this might be happening/what have I done wrong?
Is there a way to add/delete/update the default classes (for instance AspNet-Menu-WithChildren,AspNet-Menu-NonLink ) of the html generated by the asp.net menu or treeview control? I am using CSSAdapters so the menu control renders in a list format instead of table format.
I am updating a project I wrote some time ago. At the time my preference was for DataSets and DataSetTableAdapters, but I've now moved on to use Linq to SQL DataClasses. I would like to convert the project to Linq to SQL, but I am tight on time and it's a big job. My question is, is there any reasons I can't develop new modules using Linq to SQL DataClasses along side DataSets and convert the DataSets overtime?
Apart from the obvious confusion it will cause, are there any technical problems I should be aware of i.e. will there be any performance problems using the two methods?
I'm building a web app that will keep a events in a database and add the event to a Google calendar on insertion.
I have three types of events, PendingEvents, ApprovedEvents, and DeniedEvents. I'm using single table inheritance through LINQ-to-SQL, with the Event class being abstract and the 3 types inheriting from it
Each type of Event is stored in calendars differently. I would like to use an abstract member function in Event called AddToCalendar.
I'm trying to set this up in a separate class file because I'm using the LINQ-to-SQL designer and I don't want these to be overwritten if I change the LINQ diagram.
However, I get an error from all three inherited classes that "'WebCal.ApprovedEvents' does not implement inherited abstract member 'Edu.Northwestern.WebCal.Event.AddEventToCalendar()' WebCalendarWebApplication1App_CodeWebCalDataSource.designer.cs"
It looks like it won't check my outside file and only looks at the designer.
The non-designer partial class file looks something like this:
public partial class WebCalDataSourceDataContext : System.Data.Linq.DataContext {
Is it possible to create a table class that can be used for multiple tables? For example, if I have some class:
[Code]....
In LINQ to SQL, this maps to a table with a name based on the class name, DBClass. However, suppose I want to use that class for multiple tables, and it could be an arbitrary number of tables. Is this possible
Is there anyway I can extend LINQ classes through different namespaces?Typically in my class libraries I have a namespace for each class object and their associated DAO and service classes in a folder of my project, therefore on the front-end I can only use the namespaces associated with the given page and not clutter my intellisense or load in a bunch of excess stuff.
However, I have found that upon adding my .dbml LINQtoSQL file, whatever namespace that is in, whether it's the project root namespace or a custom one, is the only namespace I can use partial class extension in.I have tried even creating a custom workspace (placing the .dbml file in a folder) and then including a using statement to that namespace and I still cannot extend the partial classes.Is there anyway I can do this? Or to have the .dbml file count as being in every namespace? I don't want to remove all namespaces but the root one either.such when I try doing the partial class from a different namespace I get the following error:
Error 1 'Id' is not a member of 'LCFVB.EntityNS.Entity'. C:Usersshol726.UILAWDocumentsVisual Studio 2008ProjectsLCFVBEntityNSEntity.vb 10 7 LCFVB
I have this query and its result implements IEnumerable.
[Code]....
**Question** : How to get generated SQL from this query, or how to convert its type to ObjectQuery to use routesQuery.ToTraceString(). Is it possible?**Reason** : I want to log all SQL queries to DB, though I don't want to create new object for joined contexts (tables)**Important** : I can't use ObjectQuery initially because after all I use
I have this query and its result implements IEnumerable.
RoutesEntities routesModel = new RoutesEntities(); LocalesEntities localesModel = new LocalesEntities(); var routesQuery = from rs in routesModel.Routes.ToList() join ls in localesModel.Locales.ToList() on rs.LocaleID equals ls.LocaleID select new { LocaleID = rs.LocaleID, RouteName = rs.RouteName };
Question : How to get generated SQL from this query, or how to convert its type to ObjectQuery to use routesQuery.ToTraceString(). Is it possible?Reason : I want to log all SQL queries to DB, though I don't want to create new object for joined contexts (tables)Important : I can't use ObjectQuery initially because after all I use
I've just installed MVC 3 and have the following problem. Even if I try to run the sample project, that is included in MVC 3 installation, when I go to the Register form, only the Required attribute causes validation. The Email Format attribute doesn't work,which means I can enter non-email string into the email field and it submits the form without any error messages.
i have a field username which i want to have as a label in the edit.aspx and as a typical textbox in create.aspx . i have applied datannotation class . how would i do that. in the edit mode it is always going model.isvalid ==false . so what i did had a textbox there with the label and hid it . it is working fine now . but is there any clean way this is done in dataannotation
I used the auto generated models to use my existing SQL server in a new website.in some forms I use rich text editor (CKEditor) so I added [ValidateInput(false)] to those post back actions. but that is a bad solution 'caus I have lost of other from items which needs validation. I came across a potential solution to that using [AllowHtml] which I need to add to the model properties. I tried that:
[Code]....
but that is an error "type or namespace couldn't be found.."any ideas about where the [AllowHtml] attribute should be?
In a database table, let's say I have a non-null field named "Description" with a default value of (''). If I drag this table onto the .dbml view in Visual Studio and click on the Description field, the properties will indicate that the Auto Generated Value is set to false, thus ignoring my default value of (''). This is fine, as long as I always explicitly set a value for Description when I perform an insert/update, but I ran into a problem today when I tried to do an insert without specifying a value for Description: Cannot insert NULL value into Description. The default value I set for the field was being ignored. To try and fix this error, I went back into the .dbml and set Auto Generated Value to true, and tried again - no error this time, but the data I tried to insert was ignored, and the default value, (''), was inserted instead. I do not want to explicitly set every field to a default value programmatically when I perform inserts. Is there any other way to resolve this issue other than making the fields nullable?
I have a table in the database for users with the columns FirstName, LastName, DateUpdated, UserUpdated. Now, I display the fields FirstName and LastName but the last to fields are just for internal record keeping. I don't want the user to see or be able to edit them. However, I do want the DateUpdated and UserUpdated field to be populated upon every insert and update. The user id is in the session and I just take the current date for the DateUpdated field.
My question is: How can I write the UserUpdated and DateUpdated fields without the user providing any values?I had a couple of ideas:
- Modify the DataContext class to automatically compute the values. Don't know if that's a good idea. Also, my changes will be overwritten when I re-generate the DataContext class.
- Create hidden fields that hold these vlaues. For instance: <asp:HiddenField ID="user_createdHiddenField" Value='<%# Eval("UserUpdated") %>' runat="server" />. But how do I actually assign a value to the field?
Wanting to create custom data annotation validation. Are there any useful guides / samples on how to create them?
Firstly: StringLength with minimum and maximum length. I'm aware .NET 4 can do this, but want to do the same in .NET 3.5, if possible being able to define minimum length only (at least x chars), maximum length only (up to x chars), or both (between x and y chars).
Secondly: Validation using modulus arithmetic - if the number is a valid length, I wish to validate using the Modulus 11 algorithm (I have already implemented it in JavaScript, so I guess it would just be a simple porting?)
Update: Solved second problem, was just a case of copying over the JavaScript implementation and making a few tweaks, so don't need a solution for that.
I can't believe I'm having so much trouble finding this information. I'm endeavouring to learn about creating model classes with Linq to SQL. By default VS2010 wants to use SQL Express, but our organisation has several database servers for development so I'd rather use one of those. PLEASE can somebody tell me how I can configure VS2010 to do that, as all I get is 'A network-related or instance-specific error occurred while establishing a connection to SQL Server ... Verify that the instance name is correct'. Yeah, thanks Microsoft. Actually telling me how to verify the instance name would be a really good move here.
I have a validation attribute that inherits from ValidationAttribute. However, the particular usage of this attribute applies to lists only (IEnumerable really). How can I specify the usage of this property to only be used with items that inherit from IEnumerabe?
I have custom class level validation attribute, inheriting from ValidationAttribute, on my model.
How come it doesn't register a key in the ModelState when its IsValid is false? I can see the the error message in the ModelState.Values collection, but the ModelState.Keys collection only shows an empty string "". Can I provide a key for it - presumably this is because its not assigned to a property?
I wanna be able to use ModelState.Remove in my controller to remove this error upon a certain condition, but I have no Key!