by Pieter Brinkman
7. May 2009 05:34
When deploying a WCF webservice for a Silverligh application I got the following error:
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension: System.ServiceModel.Description.DataContractSerializerOperationBehavior
contract: http://tempuri.org/:IWebService ----> System.Runtime.Serialization.InvalidDataContractException: Type 'Project.service.HU_BACH.ScPlacemark' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.
As you can see from the error you need to add the [Serializable] attribute to all objects that are used within the webservice. After I did this I got the same error for my Linq to Sql objects generated within my DBML. You can make your Linq to Sql objects serializable by changing the dbml setting Serialization Mode to Unidirectional.
Hope it helps.
by Pieter Brinkman
15. January 2009 06:04
You have to specify which related-data you want to retrieve from a object so you can access them outside the Linq data-context. You can achieve this by using the LoadWith method of the DataLoadOptions Class. The LoadWith method accepts an lambda expression that specifies which object you want to retrieve.
In the following example I have a employee table that has a relation with the company table. In my code I want to show the employee with the company name (outside the DataContext).
Employee employee;
using (LinqDataContext db = new (LinqDataContext())
{
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Employee>(e => e.Company);
db.LoadOptions = dlo;
employee = from item in db.Employees
select item).First<Employee>();
}
string companyName = employee.Company.Name;
Because of the DataLoadOptions I can now use the company properties to print the company name outside the DataContext.
Enjoy.
by Pieter Brinkman
2. September 2008 05:25
Update 20 may 2009: New easy sollution
Set the Connection -> Application Settings property True. This will generate a connection string in your app.config.
Copy this connection string to your web.config and your all set!
=================================================================
Old post:
If you want to use your connectionstring from the web.config with Linq to Sql (dbml) you have to add the following partial class to your project:
namespace Your.Namespace
{
partial class yourDataContext
{
partial void OnCreated()
{
ConnectionStringSettings s = ConfigurationManager.ConnectionStrings["YourConnectionString"];
if (s != null)
Connection.ConnectionString = s.ConnectionString;
}
}
}
Don't forget to change the Your.Namespace, yourDataContext and YourConnectionString to fit your project.
Hope this helps.
by Pieter Brinkman
1. April 2008 02:27
When using an Linq Datasource (linq to sql) for a datagrid (Gridview, ListView, etc) you don't always want all rows from a table. To exclute data you can use the WhereParameters to add an where statement to your DataSource.
You can do limited where statements with the Visual Studio Wizards. When you need more than a limited statement you can dynamicly create an Parameter to add to your Linq DataSource.
The following examples shows how to filter the Linq Datasource that recovers all rows from the Post table and filters them on the BlogId. The BlogManager.CurrentBlogId gets the blog GUID from the Session.
Parameter whereparam = new Parameter();
whereparam.Name = "BlogId";
whereparam.DefaultValue = BlogManager.CurrentBlogId.ToString();
whereparam.Type = TypeCode.Object;
linqDataSource.WhereParameters.Add(whereparam);
linqDataSource.Where = "BlogId == Guid(@BlogId)";
You cast the @BlogId (string) to a Guid In the linqDataSource.Where property otherwise you get the following error:
Operator '==' incompatible with operand types 'Guid' and 'String'
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.Query.Dynamic.ParseException: Operator '==' incompatible with operand types 'Guid' and 'String'