Thursday, August 29, 2013

EF Code First AddOrUpdate puts null into referenced objects

I've ran into issue in my Seed() function, where I generate stub data.
This is my design:

    public class AircraftModel
    {
        public Guid Id { get; set; }

        public string Name { get; set; }

        public Guid ManufacturerId { get; set; }
        public virtual Manufacturer Manufacturer { get; set; }
    }

Now, I tried following code to generate data:

context.AircraftModels.AddOrUpdate(m => m.Name
  , new AircraftModel { 
        Name = "Global Express XRS", 
        Manufacturer = context.Manufacturers.Single(c => c.Name == "Bombardier Inc.") 
    }
);

It should work like charm I though, but it didn't. The problem was, that the Manufacturer was set to null after running AddOrUpdate - I guess because the ManufacturerId didn't match Manufacturer object.
When I changed to code to this, it worked fine:

context.AircraftModels.AddOrUpdate(m => m.Name
  , new AircraftModel { 
        Name = "Global Express XRS", 
        ManufacturerId = context.Manufacturers.Single(c => c.Name == "Bombardier Inc.").Id 
    }
);
Ok, so there's obvious problem with syncing the Manufacturer object and the ManufacturerId.
I've decided to keep them in sync using following modification:

    public class AircraftModel
    {
        private Manufacturer _manufacturer;

        public Guid Id { get; set; }

        public string Name { get; set; }

        public Guid ManufacturerId { get; set; }
        public virtual Manufacturer Manufacturer
        {
            get { return _manufacturer; }
            set
            {
                if (value != null && value.Id != ManufacturerId)
                    ManufacturerId = value.Id;
                _manufacturer = value;
            }
        }

    }

Now this code works as expected. Not sure if it's a bug or "feature"?...

ASP.Net Telerik RadScriptManager causes Sys not defined error

I ran into issue where I was working on a website with page methods (svc) and so I was using ScriptManager to register them. All was working fine until I decided to include Telerik ASP.Net AJAX control as well. I switched from ScriptManager to RadScriptManager, added all the web.config settings, but when I loaded the page in browser, I was getting all sorts of  "Sys is not defined" errors.
One thing in particular was puzzling - when I looked in browser's dev tools at the content of the "WebResources.axd?....", I was getting HTML code instead of JavaScript.
Finally I realized where the problem was - I was using Forms authentication and did not put the WebResource.axd to the exceptions list... doh!
So make sure you have the below in your web.config:

  <location path="Telerik.Web.UI.WebResource.axd">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>


Friday, August 02, 2013

Asus G73JW and Windows 8

I've updated my Asus laptop G73JW to Windows 8 and found only three important things that needed to be installed from Asus.

1) To enable the "Fn" + ... buttons, I've had to install the "ATKACPI driver and hotkey-related utilities" found on asus support web-site under "Other". This enables the key functions (such as keyboard light, sound volume controls, etc.)

2) I had VERY annoying problem where while typing, cursor would randomly jump to a mouse-pointer location. Apparently wasn't the only one with the problem. I found the solution by installing the "Synaptics TOUCHPAD driver" found under the "Touchpad" section. In the settings, I've checked to "disable internal pointing device when external is connected" (found on last tab) - this disconnects the touchpad when I have my external mouse connected and the annoying mouse-jumping problem is solved.

3) Finally, I was able to connect WiFi with no problem, but the ethernet (Atheros AR8131) adapter would just stay disabled and not recognize LAN cable plugged in. Trying to enable would not do anything. Once again installing the driver "Atheros LAN Driver" from asus support section "LAN" fixed the issue.

Saturday, May 25, 2013

Server Side Include in IIS Express

To enable SSI in IIS Express, open configuration file:

C:\Users\%user%\Documents\IISExpress\config\applicationhost.config

and within it make sure that:
1) SSI is enabled - within "globalModules" section should be a tag: <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />

2) set a default document with "shtml" - within "defaultDocument" section add e.g. <add value="index.shtml" />

One more thing to note about SSI files. I was struggling a lot with includes breaking my page layout - adding empty line in every spot where #include was used. Apparently the problem is with encoding of the file. So instead of using "Unicode (UTF-8 with signature)", save your include files with "Unicode (UTF-8 without signature)" - in visual studio you can set this in menu File -> Advanced Save Options...

Sunday, December 04, 2011

WorkItem only view in TFS 2010 Web Access

Here is an excellent how-to. It covers the very simple scenario as well as more complex approach (in case you need to deal with multiple customers and need more granual settings).
However, there's one glitch that is not mentioned there. TFS has a nasty habit of not picking up domain changes right-away. So if you just created the user & group in your domain, set everything up according to the how-to, you may end up with an error:

Access Denied: {your user} needs the following permission(s) to perform this action: View instance-level information

There's a thread describing the issue. In essence you have a choice of:

  • wait for a bit (30 minutes or so) and TFS will pick it up eventually
  • restart the TFS server
  • instead of using group, use user credentials directly (probably not the best option though)

Saturday, December 03, 2011

Adding Facebook comments to blog

I've decided to try and utilize Facebook Comments Plugin for my travel blog application (ASP.Net). At first glance it seemed like a job for 5 minutes, however it proved to be quite a tricky experience. I had following requirements:

  • need to be able to display multiple comments sections per page (since I have 10 blog-posts on each page and each post needs to have its own comments) that need to be distinguishable by querystring parameters
  • need to have a way of calculating how many comments there are for each post
  • would love to have a way of being able to get latest X comments across all the whole site (i.e. irregardless which blog-post they belong to)


To get started, follow this tutorial (post #11). In essence, you need to set up Facebook Application using following steps:
1. Go to: http://www.facebook.com/developers
2. Click on the + Set Up New App button (at the top right of the page)
3. Type your App Name (example: Mysite-Name Comments) > select Agree > click on Create App
4. Go to the Web Site tab (on the left tabs-list)
5. Enter your site url with an ending slash in Site URL, (for example: http://example.com/)
Enter your site domain without http://www. in Site Domain, (for example: example.com)
and click on Save Changes
6. You will see your Application ID number (above your app API Key & App Secret)
7. It will take between 2 to 20 minutes until it will be ready to use with.

Use this page to see the list of your applications.

Now that you have you aplication set up and you have the application ID, it's time to set up the security settings.  Comments left on for your application can be moderated here - and here using the Settings link you can also adjust the security settings.

Final step is to generate the required code for your page. Use the Comments Tool for that. The top part with generated script is NOT COMPLETE! You do need to register the Javascript SDK - I recommend using the script on that page instead of the one from comment tool (in step 1). Step 2 gives you the DIV element which contains the comments box itself - works like a charm and yes, you can use href with different querystrings.

There are couple of new features that you can read about in this blog post.

You are very close to being done, however there are couple more settings that you should add to your page's header tag. Details are described n the Open Graph Protocol documentation in the Getting Started section. Finally you should add following tag:
meta property="fb:app_id" content="YOUR-APP-ID" 
That will ensure that your moderators will be able to do in-place moderating (i.e. the plugin shows them the "moderate" option)
Use Facebook Debugger to see what settings your page uses and if there's anything that needs your attention.


Monday, July 04, 2011

Getting Could not load file or assembly App_Web for SVC

I have couple of SVC services within an ASP.Net 4.0 website. All works fine with some hiccups (see my previous posts about issues with naming, etc.), but then I started getting errors again when accessing them (500 internal server error). So I investigated what's happening and found out that services are not working and returning:

asp.net svc could not load assembly App_Web...


What the heck? All worked fine and all I did was to add some assembly references to web.config. Turns out that compilation tag may cause this issue - and solution is:

set the "batch" attribute of the "compilation" tag in web.config to "false.