- Details
- Written by: Stanko Milosev
- Category: ASP.NET
- Hits: 12387
Definition:
Primary key is such an attribute which uniquely identify the record. Some times we needs more then one keys to find the specific record such scenario in which more than one keys are used to find the specific data is called the composite primary key.
From here.
Error:
Unable to determine composite primary key ordering for type 'MvcApplication7.Models.MyMaster'. Use the ColumnAttribute or the HasKey method to specify an order for composite primary keys.
Solution:
public class MyMaster
{
[Key]
[Column(Order = 0)]
public int myField1 { get; set; }
[Key]
[Column(Order = 1)]
public int myField2 { get; set; }
public string Username { get; set; }
}
- Details
- Written by: Stanko Milosev
- Category: ASP.NET
- Hits: 7424
Just start your application without debugging:

Then just attach to process as you debug normally IIS (w3w9.exe)
- Details
- Written by: Stanko Milosev
- Category: MVC 4
- Hits: 5995
I had XML like this:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfmyNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<myNode>
<Name>Echo one</Name>
<Category>Reporting</Category>
<Id>1</Id>
<Workflow>
<Application>Reporting</Application>
<Name>EchoOne</Name>
<Configuration>
<ConfigItem>
<Key>ReportSuccessToAddress</Key>
<Value>echoOneSuccess - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportErrorToAddress</Key>
<Value>echoOneError - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportSuccessCcAddress</Key>
<Value>echoOneSuccessCc - at - echoone.com</Value>
</ConfigItem>
</Configuration>
</Workflow>
</myNode>
<myNode>
<Name>Echo two</Name>
<Category>Reporting</Category>
<Id>2</Id>
<Workflow>
<Application>Reporting</Application>
<Name>EchoTwo</Name>
<Configuration>
<ConfigItem>
<Key>ReportSuccessToAddress</Key>
<Value>echoTwoSuccess - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportErrorToAddress</Key>
<Value>echoTwoError - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportSuccessCcAddress</Key>
<Value>echoTwoSuccessCc - at - echoone.com</Value>
</ConfigItem>
</Configuration>
</Workflow>
</myNode>
</ArrayOfmyNode>
Instead of - at - should be @, I am having problems with spambot protection :)
And I wanted to extract all e-mails from ReportSuccessToAddress, ReportErrorToAddress and ReportSuccessCcAddress nodes.
Model I implemented as array in my view:
@model PlayingWithXmlInAspMvc.Models.PlayingWithXmlModel[]
Then I had to load XML from file:
XElement linqMyNodes = XElement.Load(Request.Url.AbsoluteUri + "PlayingWithXml.xml");
If you need to load XML from string, then use parse.
I have selected all myNode nodes in the XML:
IEnumerable<XElement> myLinqNodes = from myNodes in linqMyNodes.Elements("myNode") select myNodes;
After that in controller I have created model like:
PlayingWithXmlModel[] myModel = new PlayingWithXmlModel[myLinqNodes.Count()];
Extract every ConfigItem element for each myNode:
foreach (var myLinqNode in myLinqNodes)
{
myModel[i] = new PlayingWithXmlModel();
var Configurations = from configuration in myLinqNode.Elements("Workflow").Elements("Configuration").Elements("ConfigItem")
select configuration;
}
In previous line there is myModel[i] = new PlayingWithXmlModel(), which means that for every item in array you have to create object, in my case model.
Now I need to extract addresses from Configurations:
foreach (var Configuration in Configurations)
{
if (Configuration.Element("Key") != null)
{
switch (Configuration.Element("Key").Value)
{
case "ReportSuccessToAddress":
myModel[i].ReportSuccessToAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
break;
case "ReportErrorToAddress":
myModel[i].ReportErrorToAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
break;
case "ReportSuccessCcAddress":
myModel[i].ReportSuccessCcAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
break;
}
}
}
Where .Replace(" ", string.Empty) I needed to delete spaces in values.
On the end I will send model to my view like:
return View(myModel);
This article is just to show few examples of LinqToXml and passing model as array to the view. One small example you can see here.