DNN Blog

Nov 26

Posted by: Michael Washington
11/26/2007  RssIcon

This uses this post from Benjamin Hermann as an example.

First, Install ASP.NET 3.5 and Visual Studio 2008

Use Visual Studio 2008 to open DotNetNuke:

You will get a message like this:

Click Yes. This will add  the needed changes to the web.config to allow LINQ to SQL to run.

Create a module (see this tutorial for instructions on creating a simple DotNetNuke module).

Right-click on the module folder under App_Code and select Add New Item...

Select the LINQ to SQL Classes template, give the .dbml file a name and click Add.

When the .dbml file opens you can modify it's connection properties. Expand the Connection section and select SiteSqlServer from the dropdown. This instructors the module to use the database connection that the DotNetNuke site is running on.

Next, in the Server Explorer, right-click on Data Connections and click Add Connection.

Enter the connection information for the database and click OK. This is only for the designer. At run-time the module will use the connection string indicated in the earlier step.

 

You can now expand the Tables section of the Database connection you created and drag the Users table to the Object Relational Designer.

Under Properties, select UserDataContext from the drop-down.

Supply a Context Namespace and an Entity Namespace. Note, if  the .dbml file connection properties have changed when you created the Data Connection in the Server Explorer...

Change them back to SiteSqlServer (Web.config).

Now, in your module you can place a GridView on an .ascx control and use code like this to fill it with data:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace DotNetNuke.Modules.Test
{
    public partial class View : DotNetNuke.Entities.Modules.PortalModuleBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UsersDataContext mydata = new UsersDataContext();

            var results = from abc in mydata.Users select abc;
            GridView1.DataSource = results;
            GridView1.DataBind();
        }
    }
}

You can download the sample module here: Test_01.00.00_Install.zip

Note: In order to run this module on another DotNetNuke site, you need to modify the web.config:

Change: the <system.codedom> section to:

<system.codedom>
<compilers>
<compiler language="vb;vbs;visualbasic;vbscript" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" extension=".vb" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="OptionInfer" value="true"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>

Change: the <assemblies> section to:

<assemblies>
<add assembly="Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>

 

Tags:
Categories:

10 comment(s) so far...


Re: Using LINQ to SQL with DotNetNuke

Michael, nice example. It would have been even better if the example would not use any core tables for demonstration. A beginner might think that this code encourages of using direct core data table access in favor for using the framework.
Instead of using LINQ for SQL, the same example works also against the framework and LINQ to objects:

var results = from user in UserController.GetUsers(PortalId).Cast select user ;
GridView1.DataSource = results;
GridView1.DataBind();

By cshark on   11/26/2007

Re: Using LINQ to SQL with DotNetNuke

Yes I agree you should NOT access Core tables directly. In the future I will make a better tutorial that will show you how to create your own tables from scratch. Yes LINQ for objects is great and should be used, It also does not require a web.config modification. However, LINQ to SQL is a massive code savings that cannot be ignored.

By AdefWebserver on   11/26/2007

Re: Using LINQ to SQL with DotNetNuke

Thanks Michael, nice article. How would you use Link to SQL for operations like adding/editing/deleting a record in a DNN module? Is it advisable to use the framework DAL/DAL+, for these operations and have LINQ work on the querying/getting this data?

By wilan on   11/26/2007

Re: Using LINQ to SQL with DotNetNuke

I just got my hands on VS2008 so I'm still "feeling things out". My intention is to use Link to SQL for all operations like adding/editing/deleting a record because it should be a massive code and time savings.

By AdefWebserver on   11/26/2007

Re: Using LINQ to SQL with DotNetNuke

I was wondering when we'd see the first MW linq post... great stuff, thanks!!!

By y01nk on   11/26/2007

Re: Using LINQ to SQL with DotNetNuke

Can we have the example for the WAP model ?

By IndianGuru on   11/27/2007

Re: Using LINQ to SQL with DotNetNuke

I tried this with a WAP version, replaced the values suggested here in the web.config, but still get an assembly conflict:

The type 'System.Web.UI.ScriptManager' exists in both 'c:\Windows\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0__31bf3856ad364e35\System.Web.Extensions.dll' and 'c:\Windows\assembly\GAC_MSIL\System.Web.Extensions\1.0.61025.0__31bf3856ad364e35\System.Web.Extensions.dll

By jkergosi on   12/11/2007

Re: Using LINQ to SQL with DotNetNuke

One limitation here. I note that you are using the objectQualifier token which is used to name SQL objects according to prefix defined in the web.config. Ex:
{databaseOwner}[{objectQualifier}ThingsForSale]

Since LINQ dynamically references the database structures via mappings in its DBML file, LINQ will not be aware of the object qlalifier. It will error out if a DNN install uses an object qualifier. Probably better to leave it out of your SQL.

By jkergosi on   12/13/2007
Gravatar

Re: Using LINQ to SQL with DotNetNuke

can we use control LinqDataSource in module dotnetnuke?

By vinh on   7/10/2009
Gravatar

Re: Using LINQ to SQL with DotNetNuke

I can create module follow your instructions. Now, I want to create edit content to user. Please! Can you help me! Thanks!

By Nguyễn Vinh on   1/9/2012
Attend A Webinar
Free Demo Site
Download DotNetNuke Professional Edition Trial
Have Someone Contact Me

Like Us on Facebook Join our Network on LinkedIn Follow DNN Corporate on Twitter Follow DNN on Twitter

Advertisers

Sponsors

DotNetNuke Corporation

DotNetNuke Corp. is the steward of the DotNetNuke open source project, the most widely adopted Web Content Management Platform for building web sites and web applications on Microsoft .NET. Organizations use DotNetNuke to quickly develop and deploy interactive and dynamic web sites, intranets, extranets and web applications. The DotNetNuke platform is available in a free Community and subscription-based Professional and Enterprise Editions with an Elite Support option. DotNetNuke Corp. also operates Snowcovered.com where users purchase third party apps for the platform.