瀏覽代碼

Сессия1

Елизавета Голубева 2 年之前
父節點
當前提交
78a28a13aa
共有 100 個文件被更改,包括 2847 次插入8 次删除
  1. 39 0
      Demoexample/Agent.cs
  2. 30 0
      Demoexample/AgentType.cs
  3. 57 0
      Demoexample/Agents.xaml
  4. 97 0
      Demoexample/Agents.xaml.cs
  5. 21 4
      Demoexample/App.config
  6. 18 2
      Demoexample/App.xaml
  7. 14 0
      Demoexample/Class/ChangedPages.cs
  8. 13 0
      Demoexample/Class/DataBase.cs
  9. 43 0
      Demoexample/Class/Model.cs
  10. 96 0
      Demoexample/Class/ViewModel.cs
  11. 225 0
      Demoexample/Demoexample.csproj
  12. 13 2
      Demoexample/MainWindow.xaml
  13. 2 0
      Demoexample/MainWindow.xaml.cs
  14. 34 0
      Demoexample/Model1.Context.cs
  15. 636 0
      Demoexample/Model1.Context.tt
  16. 10 0
      Demoexample/Model1.Designer.cs
  17. 9 0
      Demoexample/Model1.cs
  18. 380 0
      Demoexample/Model1.edmx
  19. 20 0
      Demoexample/Model1.edmx.diagram
  20. 733 0
      Demoexample/Model1.tt
  21. 58 0
      Demoexample/NewAgent.xaml
  22. 75 0
      Demoexample/NewAgent.xaml.cs
  23. 37 0
      Demoexample/Product.cs
  24. 26 0
      Demoexample/ProductSale.cs
  25. 30 0
      Demoexample/ProductType.cs
  26. 59 0
      Demoexample/Redaction.xaml
  27. 72 0
      Demoexample/Redaction.xaml.cs
  28. 二進制
      Demoexample/agents/agent_1.png
  29. 二進制
      Demoexample/agents/agent_10.png
  30. 二進制
      Demoexample/agents/agent_100.png
  31. 二進制
      Demoexample/agents/agent_101.png
  32. 二進制
      Demoexample/agents/agent_102.png
  33. 二進制
      Demoexample/agents/agent_103.png
  34. 二進制
      Demoexample/agents/agent_104.png
  35. 二進制
      Demoexample/agents/agent_105.png
  36. 二進制
      Demoexample/agents/agent_106.png
  37. 二進制
      Demoexample/agents/agent_107.png
  38. 二進制
      Demoexample/agents/agent_108.png
  39. 二進制
      Demoexample/agents/agent_109.png
  40. 二進制
      Demoexample/agents/agent_11.png
  41. 二進制
      Demoexample/agents/agent_110.png
  42. 二進制
      Demoexample/agents/agent_111.png
  43. 二進制
      Demoexample/agents/agent_112.png
  44. 二進制
      Demoexample/agents/agent_113.png
  45. 二進制
      Demoexample/agents/agent_114.png
  46. 二進制
      Demoexample/agents/agent_115.png
  47. 二進制
      Demoexample/agents/agent_116.png
  48. 二進制
      Demoexample/agents/agent_117.png
  49. 二進制
      Demoexample/agents/agent_118.png
  50. 二進制
      Demoexample/agents/agent_119.png
  51. 二進制
      Demoexample/agents/agent_12.png
  52. 二進制
      Demoexample/agents/agent_120.png
  53. 二進制
      Demoexample/agents/agent_121.png
  54. 二進制
      Demoexample/agents/agent_122.png
  55. 二進制
      Demoexample/agents/agent_123.png
  56. 二進制
      Demoexample/agents/agent_124.png
  57. 二進制
      Demoexample/agents/agent_125.png
  58. 二進制
      Demoexample/agents/agent_126.png
  59. 二進制
      Demoexample/agents/agent_127.png
  60. 二進制
      Demoexample/agents/agent_128.png
  61. 二進制
      Demoexample/agents/agent_129.png
  62. 二進制
      Demoexample/agents/agent_13.png
  63. 二進制
      Demoexample/agents/agent_130.png
  64. 二進制
      Demoexample/agents/agent_14.png
  65. 二進制
      Demoexample/agents/agent_15.png
  66. 二進制
      Demoexample/agents/agent_16.png
  67. 二進制
      Demoexample/agents/agent_17.png
  68. 二進制
      Demoexample/agents/agent_18.png
  69. 二進制
      Demoexample/agents/agent_19.png
  70. 二進制
      Demoexample/agents/agent_2.png
  71. 二進制
      Demoexample/agents/agent_20.png
  72. 二進制
      Demoexample/agents/agent_21.png
  73. 二進制
      Demoexample/agents/agent_22.png
  74. 二進制
      Demoexample/agents/agent_23.png
  75. 二進制
      Demoexample/agents/agent_24.png
  76. 二進制
      Demoexample/agents/agent_25.png
  77. 二進制
      Demoexample/agents/agent_26.png
  78. 二進制
      Demoexample/agents/agent_27.png
  79. 二進制
      Demoexample/agents/agent_28.png
  80. 二進制
      Demoexample/agents/agent_29.png
  81. 二進制
      Demoexample/agents/agent_3.png
  82. 二進制
      Demoexample/agents/agent_30.png
  83. 二進制
      Demoexample/agents/agent_31.png
  84. 二進制
      Demoexample/agents/agent_32.png
  85. 二進制
      Demoexample/agents/agent_33.png
  86. 二進制
      Demoexample/agents/agent_34.png
  87. 二進制
      Demoexample/agents/agent_35.png
  88. 二進制
      Demoexample/agents/agent_36.png
  89. 二進制
      Demoexample/agents/agent_37.png
  90. 二進制
      Demoexample/agents/agent_38.png
  91. 二進制
      Demoexample/agents/agent_39.png
  92. 二進制
      Demoexample/agents/agent_4.png
  93. 二進制
      Demoexample/agents/agent_40.png
  94. 二進制
      Demoexample/agents/agent_41.png
  95. 二進制
      Demoexample/agents/agent_42.png
  96. 二進制
      Demoexample/agents/agent_43.png
  97. 二進制
      Demoexample/agents/agent_44.png
  98. 二進制
      Demoexample/agents/agent_45.png
  99. 二進制
      Demoexample/agents/agent_46.png
  100. 二進制
      Demoexample/agents/agent_47.png

+ 39 - 0
Demoexample/Agent.cs

@@ -0,0 +1,39 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Demoexample
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Agent
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public Agent()
+        {
+            this.ProductSale = new HashSet<ProductSale>();
+        }
+    
+        public int ID { get; set; }
+        public string Title { get; set; }
+        public int AgentTypeID { get; set; }
+        public string Address { get; set; }
+        public string INN { get; set; }
+        public string KPP { get; set; }
+        public string DirectorName { get; set; }
+        public string Phone { get; set; }
+        public string Email { get; set; }
+        public string Logo { get; set; }
+        public int Priority { get; set; }
+    
+        public virtual AgentType AgentType { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<ProductSale> ProductSale { get; set; }
+    }
+}

+ 30 - 0
Demoexample/AgentType.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Demoexample
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class AgentType
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public AgentType()
+        {
+            this.Agent = new HashSet<Agent>();
+        }
+    
+        public int ID { get; set; }
+        public string Title { get; set; }
+        public string Image { get; set; }
+    
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Agent> Agent { get; set; }
+    }
+}

+ 57 - 0
Demoexample/Agents.xaml

@@ -0,0 +1,57 @@
+<Page x:Class="Demoexample.Agents"
+      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+      xmlns:local="clr-namespace:Demoexample"
+      mc:Ignorable="d" 
+      d:DesignHeight="450" d:DesignWidth="800"
+      Title="Agents">
+    <Page.Resources>
+        <DataTemplate x:Key="AllAgent">
+            <Border BorderBrush="Black" BorderThickness="1" Margin="0,0,0,10" Width="700" Height="100">
+                <StackPanel Orientation="Horizontal" Uid="{Binding ID}" Background="{Binding Color}" MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
+                    <Image Width="100" Height="100" Source="{Binding Logo}"></Image>
+                    <StackPanel Orientation="Vertical" Width="570">
+                        <StackPanel Orientation="Horizontal">
+                            <TextBlock x:Name="TBType" Text="{Binding TypeOfAgent}"></TextBlock>
+                            <TextBlock Text=" | "></TextBlock>
+                            <TextBlock x:Name="Name" Text="{Binding Title}"></TextBlock>
+                        </StackPanel>
+                        <StackPanel Orientation="Horizontal">
+                            <TextBlock x:Name="Count" Text="{Binding Count}"></TextBlock>
+                            <TextBlock Text=" продаж за год"></TextBlock>
+                        </StackPanel>
+                        <TextBlock x:Name="Phone" Text="{Binding Phone}"></TextBlock>
+                        <StackPanel Orientation="Horizontal">
+                            <TextBlock Text="Приоритетность: "></TextBlock>
+                            <TextBlock x:Name="Priority" Text="{Binding Priority}"></TextBlock>
+                        </StackPanel>
+                    </StackPanel>
+                    <TextBlock x:Name="Sale" Text="{Binding Sale}"></TextBlock>
+                    <TextBlock Text=" %"></TextBlock>
+                </StackPanel>
+            </Border>
+        </DataTemplate>
+    </Page.Resources>
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="77*"/>
+            <RowDefinition Height="373*"/>
+        </Grid.RowDefinitions>
+        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
+            <TextBox Height="50" Width="150" Margin="0,0,10,0" x:Name="Scan" TextChanged="ChangeList"></TextBox>
+            <ComboBox x:Name="Sort" SelectionChanged="ChangeList" Margin="0,0,10,0" Height="50" Width="150">
+                <ComboBoxItem>По возрастанию наименования</ComboBoxItem>
+                <ComboBoxItem>По убыванию наименования</ComboBoxItem>
+                <ComboBoxItem>По возрастанию размера скидки</ComboBoxItem>
+                <ComboBoxItem>По убыванию размера скидки</ComboBoxItem>
+                <ComboBoxItem>По возрастанию приоритета</ComboBoxItem>
+                <ComboBoxItem>По убыванию приоритета</ComboBoxItem>
+            </ComboBox>
+            <ComboBox x:Name="Filter" SelectionChanged="ChangeList" Margin="0,0,10,0" Height="50" Width="150"></ComboBox>
+            <Button x:Name="newAgent" Content="Добавить нового агента" Click="newAgent_Click" Height="50" Width="150"></Button>
+        </StackPanel>
+        <ListBox x:Name="lbAllAgent" Grid.Row="1" ItemTemplate="{StaticResource AllAgent}"></ListBox>
+    </Grid>
+</Page>

+ 97 - 0
Demoexample/Agents.xaml.cs

@@ -0,0 +1,97 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Demoexample
+{
+    /// <summary>
+    /// Логика взаимодействия для Agents.xaml
+    /// </summary>
+    public partial class Agents : Page
+    {
+        ViewModel viewModel = new ViewModel();
+        List<Agent> change;
+        public Agents()
+        {
+            InitializeComponent();
+            lbAllAgent.ItemsSource = viewModel.agents.ToList();
+            lbAllAgent.Items.Refresh();
+            change = viewModel.agents;
+            Filter.ItemsSource = DataBase.BaseModel.AgentType.ToList();
+            Filter.SelectedValuePath = "ID";
+            Filter.DisplayMemberPath = "Title";
+            Filter.SelectedIndex = 0;
+        }
+        
+        public void ChangeList(object sender, RoutedEventArgs e)
+        {
+            change = viewModel.agents;
+            if (Filter.SelectedIndex == 0)
+            {
+                change = viewModel.agents;
+            }
+            else
+            {
+                change = change.Where(x => x.AgentTypeID == Filter.SelectedIndex).ToList();
+            }
+            lbAllAgent.ItemsSource = change;
+
+            switch (Sort.SelectedIndex)
+            {
+                case 0:
+                    change = change.OrderBy(x => x.Title).ToList();
+                    break;
+                case 1:
+                    change = change.OrderBy(x => x.Title).ToList();
+                    change.Reverse();
+                    break;
+                case 2:
+                    change = change.OrderBy(x => x.Sale).ToList();
+                    break;
+                case 3:
+                    change = change.OrderBy(x => x.Sale).ToList();
+                    change.Reverse();
+                    break;
+                case 4:
+                    change = change.OrderBy(x => x.Priority).ToList();
+                    break;
+                case 5:
+                    change = change.OrderBy(x => x.Priority).ToList();
+                    change.Reverse();
+                    break;
+            }
+            lbAllAgent.ItemsSource = change;
+
+
+            if(Scan.Text != "")
+            {
+                change = change.Where(x => x.Title.Contains(Scan.Text)).ToList();
+            }
+            lbAllAgent.ItemsSource = change;
+        }
+
+        private void newAgent_Click(object sender, RoutedEventArgs e)
+        {
+            new NewAgent().ShowDialog();
+        }
+
+        private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+        {
+            StackPanel stackPanel = (StackPanel)sender;
+            int id = Convert.ToInt32(stackPanel.Uid);
+            Agent agent = DataBase.BaseModel.Agent.FirstOrDefault(x => x.ID == id);
+            new Redaction(agent).ShowDialog();
+        }
+    }
+}

+ 21 - 4
Demoexample/App.config

@@ -1,6 +1,23 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8"?>
 <configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
-    </startup>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+  </startup>
+  <connectionStrings>
+    <add name="user32Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ngknn.ru;initial catalog=user32;persist security info=True;user id=User32;password=wsruser32;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
+  </connectionStrings>
+  <entityFramework>
+    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
+      <parameters>
+        <parameter value="mssqllocaldb" />
+      </parameters>
+    </defaultConnectionFactory>
+    <providers>
+      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
+    </providers>
+  </entityFramework>
 </configuration>

+ 18 - 2
Demoexample/App.xaml

@@ -1,9 +1,25 @@
-<Application x:Class="Demoexample.App"
+ <Application x:Class="Demoexample.App"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:local="clr-namespace:Demoexample"
              StartupUri="MainWindow.xaml">
     <Application.Resources>
-         
+        
+        <Style TargetType="TextBlock">
+            <Setter Property="FontFamily" Value="Monotype Corsiva"></Setter>
+        </Style>
+
+        <Style TargetType="TextBox">
+            <Setter Property="FontFamily" Value="Monotype Corsiva"></Setter>
+        </Style>
+        
+        <Style TargetType="Button">
+            <Setter Property="FontFamily" Value="Monotype Corsiva"></Setter>
+            <Setter Property="Background" Value="#46B29D"></Setter>
+        </Style>
+        
+        <Style TargetType="ComboBox">
+            <Setter Property="FontFamily" Value="Monotype Corsiva"></Setter>
+        </Style>
     </Application.Resources>
 </Application>

+ 14 - 0
Demoexample/Class/ChangedPages.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+
+namespace Demoexample
+{
+    class ChangedPages
+    {
+        public static Frame ChangPages;
+    }
+}

+ 13 - 0
Demoexample/Class/DataBase.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Demoexample
+{
+    class DataBase
+    {
+        public static user32Entities BaseModel = new user32Entities();
+    }
+}

+ 43 - 0
Demoexample/Class/Model.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Demoexample
+{
+    public partial class Agent
+    {
+        private string typeOfAgent;
+
+        public string TypeOfAgent
+        {
+            get { return typeOfAgent; }
+            set { typeOfAgent = value; }
+        }
+
+        private int count;
+
+        public int Count
+        {
+            get { return count; }
+            set { count = value; }
+        }
+
+        private double sale;
+
+        public double Sale
+        {
+            get { return sale; }
+            set { sale = value; }
+        }
+
+        private string color;
+
+        public string Color
+        {
+            get { return color; }
+            set { color = value; }
+        }
+    }
+}

+ 96 - 0
Demoexample/Class/ViewModel.cs

@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Demoexample
+{
+    public class ViewModel
+    {
+        public List<Agent> agents;
+        public ViewModel()
+        {
+            agents = newagent();
+        }
+
+        public List<Agent> newagent()
+        {
+            List<Agent> allagent = new List<Agent>();
+            Agent buffer;
+            List<Agent> bdagents = DataBase.BaseModel.Agent.ToList();
+            List<Product> bdproducts = DataBase.BaseModel.Product.ToList();
+            List<ProductSale> bdproductSales = DataBase.BaseModel.ProductSale.ToList();
+
+            foreach(Agent agent in bdagents)
+            {
+                buffer = new Agent();
+
+
+                buffer.ID = agent.ID;
+                buffer.Title = agent.Title;
+                buffer.Phone = agent.Phone;
+                buffer.Priority = agent.Priority;
+                buffer.AgentTypeID = agent.AgentTypeID;
+
+                AgentType AT = DataBase.BaseModel.AgentType.FirstOrDefault(x => x.ID == agent.AgentTypeID);
+                buffer.TypeOfAgent = AT.Title;
+
+                int productCount = 0;
+                int allProductCount = 0;
+
+                foreach(ProductSale productSale in bdproductSales)
+                {
+                    if(agent.ID == productSale.AgentID)
+                    {
+                        if(productSale.SaleDate.Year > 2021)
+                        {
+                            productCount += productSale.ProductCount;
+                        }
+                        allProductCount += productSale.ProductCount;
+                    }
+                }
+
+                buffer.Count = productCount;
+                if(allProductCount>0 && allProductCount<10000)
+                {
+                    buffer.Sale = 0;
+                }
+                else if(allProductCount > 10000 && allProductCount < 50000)
+                {
+                    buffer.Sale = 5;
+                }
+                else if (allProductCount > 50000 && allProductCount < 150000)
+                {
+                    buffer.Sale = 10;
+                }
+                else if (allProductCount > 150000 && allProductCount < 500000)
+                {
+                    buffer.Sale = 20;
+                }
+                else if (allProductCount > 500000 && allProductCount < 1500000)
+                {
+                    buffer.Sale = 25;
+                }
+                else if (allProductCount > 1500000 && allProductCount < 5000000)
+                {
+                    buffer.Sale = 30;
+                }
+                
+                if(buffer.Sale > 25)
+                {
+                    buffer.Color = "#FF99EA81";
+                }
+
+                buffer.Logo = agent.Logo;
+                if(agent.Logo == "")
+                {
+                    buffer.Logo = "/img/picture.png";
+                }
+
+                allagent.Add(buffer);
+            }
+            return allagent;
+        }
+    }
+}

+ 225 - 0
Demoexample/Demoexample.csproj

@@ -35,8 +35,17 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Data" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.Security" />
     <Reference Include="System.Xml" />
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="System.Core" />
@@ -55,6 +64,24 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </ApplicationDefinition>
+    <Compile Include="Agent.cs">
+      <DependentUpon>Model1.tt</DependentUpon>
+    </Compile>
+    <Compile Include="Agents.xaml.cs">
+      <DependentUpon>Agents.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="AgentType.cs">
+      <DependentUpon>Model1.tt</DependentUpon>
+    </Compile>
+    <Compile Include="Class\Model.cs" />
+    <Compile Include="Class\ViewModel.cs" />
+    <Compile Include="Redaction.xaml.cs">
+      <DependentUpon>Redaction.xaml</DependentUpon>
+    </Compile>
+    <Page Include="Agents.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="MainWindow.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -63,12 +90,49 @@
       <DependentUpon>App.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Class\ChangedPages.cs" />
+    <Compile Include="Class\DataBase.cs" />
     <Compile Include="MainWindow.xaml.cs">
       <DependentUpon>MainWindow.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Page Include="NewAgent.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="Redaction.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Model1.Context.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Model1.Context.tt</DependentUpon>
+    </Compile>
+    <Compile Include="Model1.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Model1.tt</DependentUpon>
+    </Compile>
+    <Compile Include="Model1.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Model1.edmx</DependentUpon>
+    </Compile>
+    <Compile Include="NewAgent.xaml.cs">
+      <DependentUpon>NewAgent.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Product.cs">
+      <DependentUpon>Model1.tt</DependentUpon>
+    </Compile>
+    <Compile Include="ProductSale.cs">
+      <DependentUpon>Model1.tt</DependentUpon>
+    </Compile>
+    <Compile Include="ProductType.cs">
+      <DependentUpon>Model1.tt</DependentUpon>
+    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -86,6 +150,14 @@
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
     </EmbeddedResource>
+    <EntityDeploy Include="Model1.edmx">
+      <Generator>EntityModelCodeGenerator</Generator>
+      <LastGenOutput>Model1.Designer.cs</LastGenOutput>
+    </EntityDeploy>
+    <None Include="Model1.edmx.diagram">
+      <DependentUpon>Model1.edmx</DependentUpon>
+    </None>
+    <None Include="packages.config" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>
       <LastGenOutput>Settings.Designer.cs</LastGenOutput>
@@ -94,5 +166,158 @@
   <ItemGroup>
     <None Include="App.config" />
   </ItemGroup>
+  <ItemGroup>
+    <Resource Include="agents\agent_1.png" />
+    <Resource Include="agents\agent_10.png" />
+    <Resource Include="agents\agent_100.png" />
+    <Resource Include="agents\agent_101.png" />
+    <Resource Include="agents\agent_102.png" />
+    <Resource Include="agents\agent_103.png" />
+    <Resource Include="agents\agent_104.png" />
+    <Resource Include="agents\agent_105.png" />
+    <Resource Include="agents\agent_106.png" />
+    <Resource Include="agents\agent_107.png" />
+    <Resource Include="agents\agent_108.png" />
+    <Resource Include="agents\agent_109.png" />
+    <Resource Include="agents\agent_11.png" />
+    <Resource Include="agents\agent_110.png" />
+    <Resource Include="agents\agent_111.png" />
+    <Resource Include="agents\agent_112.png" />
+    <Resource Include="agents\agent_113.png" />
+    <Resource Include="agents\agent_114.png" />
+    <Resource Include="agents\agent_115.png" />
+    <Resource Include="agents\agent_116.png" />
+    <Resource Include="agents\agent_117.png" />
+    <Resource Include="agents\agent_118.png" />
+    <Resource Include="agents\agent_119.png" />
+    <Resource Include="agents\agent_12.png" />
+    <Resource Include="agents\agent_120.png" />
+    <Resource Include="agents\agent_121.png" />
+    <Resource Include="agents\agent_122.png" />
+    <Resource Include="agents\agent_123.png" />
+    <Resource Include="agents\agent_124.png" />
+    <Resource Include="agents\agent_125.png" />
+    <Resource Include="agents\agent_126.png" />
+    <Resource Include="agents\agent_127.png" />
+    <Resource Include="agents\agent_128.png" />
+    <Resource Include="agents\agent_129.png" />
+    <Resource Include="agents\agent_13.png" />
+    <Resource Include="agents\agent_130.png" />
+    <Resource Include="agents\agent_14.png" />
+    <Resource Include="agents\agent_15.png" />
+    <Resource Include="agents\agent_16.png" />
+    <Resource Include="agents\agent_17.png" />
+    <Resource Include="agents\agent_18.png" />
+    <Resource Include="agents\agent_19.png" />
+    <Resource Include="agents\agent_2.png" />
+    <Resource Include="agents\agent_20.png" />
+    <Resource Include="agents\agent_21.png" />
+    <Resource Include="agents\agent_22.png" />
+    <Resource Include="agents\agent_23.png" />
+    <Resource Include="agents\agent_24.png" />
+    <Resource Include="agents\agent_25.png" />
+    <Resource Include="agents\agent_26.png" />
+    <Resource Include="agents\agent_27.png" />
+    <Resource Include="agents\agent_28.png" />
+    <Resource Include="agents\agent_29.png" />
+    <Resource Include="agents\agent_3.png" />
+    <Resource Include="agents\agent_30.png" />
+    <Resource Include="agents\agent_31.png" />
+    <Resource Include="agents\agent_32.png" />
+    <Resource Include="agents\agent_33.png" />
+    <Resource Include="agents\agent_34.png" />
+    <Resource Include="agents\agent_35.png" />
+    <Resource Include="agents\agent_36.png" />
+    <Resource Include="agents\agent_37.png" />
+    <Resource Include="agents\agent_38.png" />
+    <Resource Include="agents\agent_39.png" />
+    <Resource Include="agents\agent_4.png" />
+    <Resource Include="agents\agent_40.png" />
+    <Resource Include="agents\agent_41.png" />
+    <Resource Include="agents\agent_42.png" />
+    <Resource Include="agents\agent_43.png" />
+    <Resource Include="agents\agent_44.png" />
+    <Resource Include="agents\agent_45.png" />
+    <Resource Include="agents\agent_46.png" />
+    <Resource Include="agents\agent_47.png" />
+    <Resource Include="agents\agent_48.png" />
+    <Resource Include="agents\agent_49.png" />
+    <Resource Include="agents\agent_5.png" />
+    <Resource Include="agents\agent_50.png" />
+    <Resource Include="agents\agent_51.png" />
+    <Resource Include="agents\agent_52.png" />
+    <Resource Include="agents\agent_53.png" />
+    <Resource Include="agents\agent_54.png" />
+    <Resource Include="agents\agent_55.png" />
+    <Resource Include="agents\agent_56.png" />
+    <Resource Include="agents\agent_57.png" />
+    <Resource Include="agents\agent_58.png" />
+    <Resource Include="agents\agent_59.png" />
+    <Resource Include="agents\agent_6.png" />
+    <Resource Include="agents\agent_60.png" />
+    <Resource Include="agents\agent_61.png" />
+    <Resource Include="agents\agent_62.png" />
+    <Resource Include="agents\agent_63.png" />
+    <Resource Include="agents\agent_64.png" />
+    <Resource Include="agents\agent_65.png" />
+    <Resource Include="agents\agent_66.png" />
+    <Resource Include="agents\agent_67.png" />
+    <Resource Include="agents\agent_68.png" />
+    <Resource Include="agents\agent_69.png" />
+    <Resource Include="agents\agent_7.png" />
+    <Resource Include="agents\agent_70.png" />
+    <Resource Include="agents\agent_71.png" />
+    <Resource Include="agents\agent_72.png" />
+    <Resource Include="agents\agent_73.png" />
+    <Resource Include="agents\agent_74.png" />
+    <Resource Include="agents\agent_75.png" />
+    <Resource Include="agents\agent_76.png" />
+    <Resource Include="agents\agent_77.png" />
+    <Resource Include="agents\agent_78.png" />
+    <Resource Include="agents\agent_79.png" />
+    <Resource Include="agents\agent_8.png" />
+    <Resource Include="agents\agent_80.png" />
+    <Resource Include="agents\agent_81.png" />
+    <Resource Include="agents\agent_82.png" />
+    <Resource Include="agents\agent_83.png" />
+    <Resource Include="agents\agent_84.png" />
+    <Resource Include="agents\agent_85.png" />
+    <Resource Include="agents\agent_86.png" />
+    <Resource Include="agents\agent_87.png" />
+    <Resource Include="agents\agent_88.png" />
+    <Resource Include="agents\agent_89.png" />
+    <Resource Include="agents\agent_9.png" />
+    <Resource Include="agents\agent_90.png" />
+    <Resource Include="agents\agent_91.png" />
+    <Resource Include="agents\agent_92.png" />
+    <Resource Include="agents\agent_93.png" />
+    <Resource Include="agents\agent_94.png" />
+    <Resource Include="agents\agent_95.png" />
+    <Resource Include="agents\agent_96.png" />
+    <Resource Include="agents\agent_97.png" />
+    <Resource Include="agents\agent_98.png" />
+    <Resource Include="agents\agent_99.png" />
+  </ItemGroup>
+  <ItemGroup />
+  <ItemGroup>
+    <Resource Include="img\picture.png" />
+    <Resource Include="img\Приятный шелест.ico" />
+    <Resource Include="img\Приятный шелест.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Model1.Context.tt">
+      <Generator>TextTemplatingFileGenerator</Generator>
+      <LastGenOutput>Model1.Context.cs</LastGenOutput>
+      <DependentUpon>Model1.edmx</DependentUpon>
+    </Content>
+    <Content Include="Model1.tt">
+      <Generator>TextTemplatingFileGenerator</Generator>
+      <DependentUpon>Model1.edmx</DependentUpon>
+      <LastGenOutput>Model1.cs</LastGenOutput>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>

+ 13 - 2
Demoexample/MainWindow.xaml

@@ -5,8 +5,19 @@
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:Demoexample"
         mc:Ignorable="d"
-        Title="MainWindow" Height="450" Width="800">
+        Icon="img/Приятный шелест.ico"
+        Title="Приятный шелест" Height="450" Width="800">
     <Grid>
-        
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="61"/>
+            <ColumnDefinition Width="731*"/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="61"/>
+            <RowDefinition Height="365*"/>
+        </Grid.RowDefinitions>
+        <Image Source="img/Приятный шелест.png" Width="60" Height="60" Grid.Column="0" Grid.Row="0"></Image>
+        <TextBlock Text="Приятный шелест" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" ></TextBlock>
+        <Frame x:Name="MainFraim" NavigationUIVisibility="Hidden" Grid.ColumnSpan="2" Grid.Row="1"></Frame>
     </Grid>
 </Window>

+ 2 - 0
Demoexample/MainWindow.xaml.cs

@@ -23,6 +23,8 @@ namespace Demoexample
         public MainWindow()
         {
             InitializeComponent();
+            MainFraim.Navigate(new Agents());
+            ChangedPages.ChangPages = MainFraim;
         }
     }
 }

+ 34 - 0
Demoexample/Model1.Context.cs

@@ -0,0 +1,34 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Demoexample
+{
+    using System;
+    using System.Data.Entity;
+    using System.Data.Entity.Infrastructure;
+    
+    public partial class user32Entities : DbContext
+    {
+        public user32Entities()
+            : base("name=user32Entities")
+        {
+        }
+    
+        protected override void OnModelCreating(DbModelBuilder modelBuilder)
+        {
+            throw new UnintentionalCodeFirstException();
+        }
+    
+        public virtual DbSet<Agent> Agent { get; set; }
+        public virtual DbSet<AgentType> AgentType { get; set; }
+        public virtual DbSet<Product> Product { get; set; }
+        public virtual DbSet<ProductSale> ProductSale { get; set; }
+        public virtual DbSet<ProductType> ProductType { get; set; }
+    }
+}

+ 636 - 0
Demoexample/Model1.Context.tt

@@ -0,0 +1,636 @@
+<#@ template language="C#" debug="false" hostspecific="true"#>
+<#@ include file="EF6.Utility.CS.ttinclude"#><#@
+ output extension=".cs"#><#
+
+const string inputFile = @"Model1.edmx";
+var textTransform = DynamicTextTransformation.Create(this);
+var code = new CodeGenerationTools(this);
+var ef = new MetadataTools(this);
+var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
+var loader = new EdmMetadataLoader(textTransform.Host, textTransform.Errors);
+var itemCollection = loader.CreateEdmItemCollection(inputFile);
+var modelNamespace = loader.GetModelNamespace(inputFile);
+var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);
+
+var container = itemCollection.OfType<EntityContainer>().FirstOrDefault();
+if (container == null)
+{
+    return string.Empty;
+}
+#>
+//------------------------------------------------------------------------------
+// <auto-generated>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#>
+//
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#>
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+<#
+
+var codeNamespace = code.VsNamespaceSuggestion();
+if (!String.IsNullOrEmpty(codeNamespace))
+{
+#>
+namespace <#=code.EscapeNamespace(codeNamespace)#>
+{
+<#
+    PushIndent("    ");
+}
+
+#>
+using System;
+using System.Data.Entity;
+using System.Data.Entity.Infrastructure;
+<#
+if (container.FunctionImports.Any())
+{
+#>
+using System.Data.Entity.Core.Objects;
+using System.Linq;
+<#
+}
+#>
+
+<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
+{
+    public <#=code.Escape(container)#>()
+        : base("name=<#=container.Name#>")
+    {
+<#
+if (!loader.IsLazyLoadingEnabled(container))
+{
+#>
+        this.Configuration.LazyLoadingEnabled = false;
+<#
+}
+
+foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
+{
+    // Note: the DbSet members are defined below such that the getter and
+    // setter always have the same accessibility as the DbSet definition
+    if (Accessibility.ForReadOnlyProperty(entitySet) != "public")
+    {
+#>
+        <#=codeStringGenerator.DbSetInitializer(entitySet)#>
+<#
+    }
+}
+#>
+    }
+
+    protected override void OnModelCreating(DbModelBuilder modelBuilder)
+    {
+        throw new UnintentionalCodeFirstException();
+    }
+
+<#
+    foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
+    {
+#>
+    <#=codeStringGenerator.DbSet(entitySet)#>
+<#
+    }
+
+    foreach (var edmFunction in container.FunctionImports)
+    {
+        WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: false);
+    }
+#>
+}
+<#
+
+if (!String.IsNullOrEmpty(codeNamespace))
+{
+    PopIndent();
+#>
+}
+<#
+}
+#>
+<#+
+
+private void WriteFunctionImport(TypeMapper typeMapper, CodeStringGenerator codeStringGenerator, EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+{
+    if (typeMapper.IsComposable(edmFunction))
+    {
+#>
+
+    [DbFunction("<#=edmFunction.NamespaceName#>", "<#=edmFunction.Name#>")]
+    <#=codeStringGenerator.ComposableFunctionMethod(edmFunction, modelNamespace)#>
+    {
+<#+
+        codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter);
+#>
+        <#=codeStringGenerator.ComposableCreateQuery(edmFunction, modelNamespace)#>
+    }
+<#+
+    }
+    else
+    {
+#>
+
+    <#=codeStringGenerator.FunctionMethod(edmFunction, modelNamespace, includeMergeOption)#>
+    {
+<#+
+        codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter);
+#>
+        <#=codeStringGenerator.ExecuteFunction(edmFunction, modelNamespace, includeMergeOption)#>
+    }
+<#+
+        if (typeMapper.GenerateMergeOptionFunction(edmFunction, includeMergeOption))
+        {
+            WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: true);
+        }
+    }
+}
+
+public void WriteFunctionParameter(string name, string isNotNull, string notNullInit, string nullInit)
+{
+#>
+        var <#=name#> = <#=isNotNull#> ?
+            <#=notNullInit#> :
+            <#=nullInit#>;
+
+<#+
+}
+
+public const string TemplateId = "CSharp_DbContext_Context_EF6";
+
+public class CodeStringGenerator
+{
+    private readonly CodeGenerationTools _code;
+    private readonly TypeMapper _typeMapper;
+    private readonly MetadataTools _ef;
+
+    public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(typeMapper, "typeMapper");
+        ArgumentNotNull(ef, "ef");
+
+        _code = code;
+        _typeMapper = typeMapper;
+        _ef = ef;
+    }
+
+    public string Property(EdmProperty edmProperty)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            Accessibility.ForProperty(edmProperty),
+            _typeMapper.GetTypeName(edmProperty.TypeUsage),
+            _code.Escape(edmProperty),
+            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
+            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
+    }
+
+    public string NavigationProperty(NavigationProperty navProp)
+    {
+        var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType());
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)),
+            navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
+            _code.Escape(navProp),
+            _code.SpaceAfter(Accessibility.ForGetter(navProp)),
+            _code.SpaceAfter(Accessibility.ForSetter(navProp)));
+    }
+    
+    public string AccessibilityAndVirtual(string accessibility)
+    {
+        return accessibility + (accessibility != "private" ? " virtual" : "");
+    }
+    
+    public string EntityClassOpening(EntityType entity)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1}partial class {2}{3}",
+            Accessibility.ForType(entity),
+            _code.SpaceAfter(_code.AbstractOption(entity)),
+            _code.Escape(entity),
+            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
+    }
+    
+    public string EnumOpening(SimpleType enumType)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} enum {1} : {2}",
+            Accessibility.ForType(enumType),
+            _code.Escape(enumType),
+            _code.Escape(_typeMapper.UnderlyingClrType(enumType)));
+        }
+    
+    public void WriteFunctionParameters(EdmFunction edmFunction, Action<string, string, string, string> writeParameter)
+    {
+        var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+        foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable))
+        {
+            var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null";
+            var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")";
+            var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))";
+            writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit);
+        }
+    }
+    
+    public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} IQueryable<{1}> {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            _code.Escape(edmFunction),
+            string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()));
+    }
+    
+    public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});",
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            edmFunction.NamespaceName,
+            edmFunction.Name,
+            string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()),
+            _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())));
+    }
+    
+    public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray());
+        if (includeMergeOption)
+        {
+            paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption";
+        }
+
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            _code.Escape(edmFunction),
+            paramList);
+    }
+    
+    public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));
+        if (includeMergeOption)
+        {
+            callParams = ", mergeOption" + callParams;
+        }
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});",
+            returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            edmFunction.Name,
+            callParams);
+    }
+    
+    public string DbSet(EntitySet entitySet)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} virtual DbSet<{1}> {2} {{ get; set; }}",
+            Accessibility.ForReadOnlyProperty(entitySet),
+            _typeMapper.GetTypeName(entitySet.ElementType),
+            _code.Escape(entitySet));
+    }
+
+    public string DbSetInitializer(EntitySet entitySet)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} = Set<{1}>();",
+            _code.Escape(entitySet),
+            _typeMapper.GetTypeName(entitySet.ElementType));
+    }
+
+    public string UsingDirectives(bool inHeader, bool includeCollections = true)
+    {
+        return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
+            ? string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}using System;{1}" +
+                "{2}",
+                inHeader ? Environment.NewLine : "",
+                includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
+                inHeader ? "" : Environment.NewLine)
+            : "";
+    }
+}
+
+public class TypeMapper
+{
+    private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName";
+
+    private readonly System.Collections.IList _errors;
+    private readonly CodeGenerationTools _code;
+    private readonly MetadataTools _ef;
+
+    public static string FixNamespaces(string typeName)
+    {
+        return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial.");
+    }
+
+    public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(ef, "ef");
+        ArgumentNotNull(errors, "errors");
+
+        _code = code;
+        _ef = ef;
+        _errors = errors;
+    }
+
+    public string GetTypeName(TypeUsage typeUsage)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null);
+    }
+
+    public string GetTypeName(EdmType edmType)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: null);
+    }
+
+    public string GetTypeName(TypeUsage typeUsage, string modelNamespace)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, string modelNamespace)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace)
+    {
+        if (edmType == null)
+        {
+            return null;
+        }
+
+        var collectionType = edmType as CollectionType;
+        if (collectionType != null)
+        {
+            return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace));
+        }
+
+        var typeName = _code.Escape(edmType.MetadataProperties
+                                .Where(p => p.Name == ExternalTypeNameAttributeName)
+                                .Select(p => (string)p.Value)
+                                .FirstOrDefault())
+            ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ?
+                _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) :
+                _code.Escape(edmType));
+
+        if (edmType is StructuralType)
+        {
+            return typeName;
+        }
+
+        if (edmType is SimpleType)
+        {
+            var clrType = UnderlyingClrType(edmType);
+            if (!IsEnumType(edmType))
+            {
+                typeName = _code.Escape(clrType);
+            }
+
+            typeName = FixNamespaces(typeName);
+
+            return clrType.IsValueType && isNullable == true ?
+                String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) :
+                typeName;
+        }
+
+        throw new ArgumentException("edmType");
+    }
+    
+    public Type UnderlyingClrType(EdmType edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        var primitiveType = edmType as PrimitiveType;
+        if (primitiveType != null)
+        {
+            return primitiveType.ClrEquivalentType;
+        }
+
+        if (IsEnumType(edmType))
+        {
+            return GetEnumUnderlyingType(edmType).ClrEquivalentType;
+        }
+
+        return typeof(object);
+    }
+    
+    public object GetEnumMemberValue(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var valueProperty = enumMember.GetType().GetProperty("Value");
+        return valueProperty == null ? null : valueProperty.GetValue(enumMember, null);
+    }
+    
+    public string GetEnumMemberName(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var nameProperty = enumMember.GetType().GetProperty("Name");
+        return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null);
+    }
+
+    public System.Collections.IEnumerable GetEnumMembers(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        var membersProperty = enumType.GetType().GetProperty("Members");
+        return membersProperty != null 
+            ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null)
+            : Enumerable.Empty<MetadataItem>();
+    }
+    
+    public bool EnumIsFlags(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+        
+        var isFlagsProperty = enumType.GetType().GetProperty("IsFlags");
+        return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null);
+    }
+
+    public bool IsEnumType(GlobalItem edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        return edmType.GetType().Name == "EnumType";
+    }
+
+    public PrimitiveType GetEnumUnderlyingType(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null);
+    }
+
+    public string CreateLiteral(object value)
+    {
+        if (value == null || value.GetType() != typeof(TimeSpan))
+        {
+            return _code.CreateLiteral(value);
+        }
+
+        return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks);
+    }
+    
+    public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable<string> types, string sourceFile)
+    {
+        ArgumentNotNull(types, "types");
+        ArgumentNotNull(sourceFile, "sourceFile");
+        
+        var hash = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
+        if (types.Any(item => !hash.Add(item)))
+        {
+            _errors.Add(
+                new CompilerError(sourceFile, -1, -1, "6023",
+                    String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict"))));
+            return false;
+        }
+        return true;
+    }
+    
+    public IEnumerable<SimpleType> GetEnumItemsToGenerate(IEnumerable<GlobalItem> itemCollection)
+    {
+        return GetItemsToGenerate<SimpleType>(itemCollection)
+            .Where(e => IsEnumType(e));
+    }
+    
+    public IEnumerable<T> GetItemsToGenerate<T>(IEnumerable<GlobalItem> itemCollection) where T: EdmType
+    {
+        return itemCollection
+            .OfType<T>()
+            .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName))
+            .OrderBy(i => i.Name);
+    }
+
+    public IEnumerable<string> GetAllGlobalItems(IEnumerable<GlobalItem> itemCollection)
+    {
+        return itemCollection
+            .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i))
+            .Select(g => GetGlobalItemName(g));
+    }
+
+    public string GetGlobalItemName(GlobalItem item)
+    {
+        if (item is EdmType)
+        {
+            return ((EdmType)item).Name;
+        }
+        else
+        {
+            return ((EntityContainer)item).Name;
+        }
+    }
+
+    public IEnumerable<EdmProperty> GetSimpleProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetSimpleProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+    
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+
+    public IEnumerable<NavigationProperty> GetNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type);
+    }
+    
+    public IEnumerable<NavigationProperty> GetCollectionNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many);
+    }
+    
+    public FunctionParameter GetReturnParameter(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters");
+        return returnParamsProperty == null
+            ? edmFunction.ReturnParameter
+            : ((IEnumerable<FunctionParameter>)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault();
+    }
+
+    public bool IsComposable(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute");
+        return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null);
+    }
+
+    public IEnumerable<FunctionImportParameter> GetParameters(EdmFunction edmFunction)
+    {
+        return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+    }
+
+    public TypeUsage GetReturnType(EdmFunction edmFunction)
+    {
+        var returnParam = GetReturnParameter(edmFunction);
+        return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage);
+    }
+    
+    public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption)
+    {
+        var returnType = GetReturnType(edmFunction);
+        return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType;
+    }
+}
+
+public static void ArgumentNotNull<T>(T arg, string name) where T : class
+{
+    if (arg == null)
+    {
+        throw new ArgumentNullException(name);
+    }
+}
+#>

+ 10 - 0
Demoexample/Model1.Designer.cs

@@ -0,0 +1,10 @@
+// Создание кода T4 для модели "D:\ГолубеваDemo\Demoexample\Demoexample\Model1.edmx" включено. 
+// Чтобы включить формирование кода прежних версий, измените значение свойства "Стратегия создания кода" конструктора
+// на "Legacy ObjectContext". Это свойство доступно в окне "Свойства", если модель
+// открыта в конструкторе.
+
+// Если не сформированы контекст и классы сущности, возможная причина в том, что вы создали пустую модель, но
+// еще не выбрали версию Entity Framework для использования. Чтобы сформировать класс контекста и классы сущностей
+// для своей модели, откройте модель в конструкторе, щелкните правой кнопкой область конструктора и
+// выберите "Обновить модель из базы данных", "Сформировать базу данных из модели" или "Добавить элемент формирования
+// кода...".

+ 9 - 0
Demoexample/Model1.cs

@@ -0,0 +1,9 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+

+ 380 - 0
Demoexample/Model1.edmx

@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="utf-8"?>
+<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
+  <!-- EF Runtime content -->
+  <edmx:Runtime>
+    <!-- SSDL content -->
+    <edmx:StorageModels>
+    <Schema Namespace="Хранилище user32Model" Provider="System.Data.SqlClient" ProviderManifestToken="2012" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
+        <EntityType Name="Agent">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
+          <Property Name="Title" Type="nvarchar" MaxLength="150" Nullable="false" />
+          <Property Name="AgentTypeID" Type="int" Nullable="false" />
+          <Property Name="Address" Type="nvarchar" MaxLength="300" />
+          <Property Name="INN" Type="varchar" MaxLength="12" Nullable="false" />
+          <Property Name="KPP" Type="varchar" MaxLength="9" />
+          <Property Name="DirectorName" Type="nvarchar" MaxLength="100" />
+          <Property Name="Phone" Type="nvarchar" MaxLength="20" Nullable="false" />
+          <Property Name="Email" Type="nvarchar" MaxLength="255" />
+          <Property Name="Logo" Type="nvarchar" MaxLength="100" />
+          <Property Name="Priority" Type="int" Nullable="false" />
+        </EntityType>
+        <EntityType Name="AgentType">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
+          <Property Name="Title" Type="nvarchar" MaxLength="50" Nullable="false" />
+          <Property Name="Image" Type="nvarchar" MaxLength="100" />
+        </EntityType>
+        <EntityType Name="Product">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
+          <Property Name="Title" Type="nvarchar" MaxLength="100" Nullable="false" />
+          <Property Name="ProductTypeID" Type="int" />
+          <Property Name="ArticleNumber" Type="nvarchar" MaxLength="10" Nullable="false" />
+          <Property Name="Description" Type="nvarchar(max)" />
+          <Property Name="Image" Type="nvarchar" MaxLength="100" />
+          <Property Name="ProductionPersonCount" Type="int" />
+          <Property Name="ProductionWorkshopNumber" Type="int" />
+          <Property Name="MinCostForAgent" Type="decimal" Precision="10" Scale="2" Nullable="false" />
+        </EntityType>
+        <EntityType Name="ProductSale">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
+          <Property Name="AgentID" Type="int" Nullable="false" />
+          <Property Name="ProductID" Type="int" Nullable="false" />
+          <Property Name="SaleDate" Type="date" Nullable="false" />
+          <Property Name="ProductCount" Type="int" Nullable="false" />
+        </EntityType>
+        <EntityType Name="ProductType">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
+          <Property Name="Title" Type="nvarchar" MaxLength="50" Nullable="false" />
+          <Property Name="DefectedPercent" Type="float" />
+        </EntityType>
+        <Association Name="FK_Agent_AgentType">
+          <End Role="AgentType" Type="Self.AgentType" Multiplicity="1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Role="Agent" Type="Self.Agent" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="AgentType">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="Agent">
+              <PropertyRef Name="AgentTypeID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+        <Association Name="FK_Product_ProductType">
+          <End Role="ProductType" Type="Self.ProductType" Multiplicity="0..1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Role="Product" Type="Self.Product" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="ProductType">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="Product">
+              <PropertyRef Name="ProductTypeID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+        <Association Name="FK_ProductSale_Agent">
+          <End Role="Agent" Type="Self.Agent" Multiplicity="1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Role="ProductSale" Type="Self.ProductSale" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="Agent">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="ProductSale">
+              <PropertyRef Name="AgentID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+        <Association Name="FK_ProductSale_Product">
+          <End Role="Product" Type="Self.Product" Multiplicity="1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Role="ProductSale" Type="Self.ProductSale" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="Product">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="ProductSale">
+              <PropertyRef Name="ProductID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+        <EntityContainer Name="Хранилище user32ModelContainer">
+          <EntitySet Name="Agent" EntityType="Self.Agent" Schema="dbo" store:Type="Tables" />
+          <EntitySet Name="AgentType" EntityType="Self.AgentType" Schema="dbo" store:Type="Tables" />
+          <EntitySet Name="Product" EntityType="Self.Product" Schema="dbo" store:Type="Tables" />
+          <EntitySet Name="ProductSale" EntityType="Self.ProductSale" Schema="dbo" store:Type="Tables" />
+          <EntitySet Name="ProductType" EntityType="Self.ProductType" Schema="dbo" store:Type="Tables" />
+          <AssociationSet Name="FK_Agent_AgentType" Association="Self.FK_Agent_AgentType">
+            <End Role="AgentType" EntitySet="AgentType" />
+            <End Role="Agent" EntitySet="Agent" />
+          </AssociationSet>
+          <AssociationSet Name="FK_Product_ProductType" Association="Self.FK_Product_ProductType">
+            <End Role="ProductType" EntitySet="ProductType" />
+            <End Role="Product" EntitySet="Product" />
+          </AssociationSet>
+          <AssociationSet Name="FK_ProductSale_Agent" Association="Self.FK_ProductSale_Agent">
+            <End Role="Agent" EntitySet="Agent" />
+            <End Role="ProductSale" EntitySet="ProductSale" />
+          </AssociationSet>
+          <AssociationSet Name="FK_ProductSale_Product" Association="Self.FK_ProductSale_Product">
+            <End Role="Product" EntitySet="Product" />
+            <End Role="ProductSale" EntitySet="ProductSale" />
+          </AssociationSet>
+        </EntityContainer>
+      </Schema></edmx:StorageModels>
+    <!-- CSDL content -->
+    <edmx:ConceptualModels>
+      <Schema Namespace="user32Model" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
+        <EntityContainer Name="user32Entities" annotation:LazyLoadingEnabled="true">
+          <EntitySet Name="Agent" EntityType="user32Model.Agent" />
+          <EntitySet Name="AgentType" EntityType="user32Model.AgentType" />
+          <EntitySet Name="Product" EntityType="user32Model.Product" />
+          <EntitySet Name="ProductSale" EntityType="user32Model.ProductSale" />
+          <EntitySet Name="ProductType" EntityType="user32Model.ProductType" />
+          <AssociationSet Name="FK_Agent_AgentType" Association="user32Model.FK_Agent_AgentType">
+            <End Role="AgentType" EntitySet="AgentType" />
+            <End Role="Agent" EntitySet="Agent" />
+          </AssociationSet>
+          <AssociationSet Name="FK_ProductSale_Agent" Association="user32Model.FK_ProductSale_Agent">
+            <End Role="Agent" EntitySet="Agent" />
+            <End Role="ProductSale" EntitySet="ProductSale" />
+          </AssociationSet>
+          <AssociationSet Name="FK_Product_ProductType" Association="user32Model.FK_Product_ProductType">
+            <End Role="ProductType" EntitySet="ProductType" />
+            <End Role="Product" EntitySet="Product" />
+          </AssociationSet>
+          <AssociationSet Name="FK_ProductSale_Product" Association="user32Model.FK_ProductSale_Product">
+            <End Role="Product" EntitySet="Product" />
+            <End Role="ProductSale" EntitySet="ProductSale" />
+          </AssociationSet>
+        </EntityContainer>
+        <EntityType Name="Agent">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
+          <Property Name="Title" Type="String" Nullable="false" MaxLength="150" FixedLength="false" Unicode="true" />
+          <Property Name="AgentTypeID" Type="Int32" Nullable="false" />
+          <Property Name="Address" Type="String" MaxLength="300" FixedLength="false" Unicode="true" />
+          <Property Name="INN" Type="String" Nullable="false" MaxLength="12" FixedLength="false" Unicode="false" />
+          <Property Name="KPP" Type="String" MaxLength="9" FixedLength="false" Unicode="false" />
+          <Property Name="DirectorName" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
+          <Property Name="Phone" Type="String" Nullable="false" MaxLength="20" FixedLength="false" Unicode="true" />
+          <Property Name="Email" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
+          <Property Name="Logo" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
+          <Property Name="Priority" Type="Int32" Nullable="false" />
+          <NavigationProperty Name="AgentType" Relationship="user32Model.FK_Agent_AgentType" FromRole="Agent" ToRole="AgentType" />
+          <NavigationProperty Name="ProductSale" Relationship="user32Model.FK_ProductSale_Agent" FromRole="Agent" ToRole="ProductSale" />
+        </EntityType>
+        <EntityType Name="AgentType">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
+          <Property Name="Title" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
+          <Property Name="Image" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
+          <NavigationProperty Name="Agent" Relationship="user32Model.FK_Agent_AgentType" FromRole="AgentType" ToRole="Agent" />
+        </EntityType>
+        <EntityType Name="Product">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
+          <Property Name="Title" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="true" />
+          <Property Name="ProductTypeID" Type="Int32" />
+          <Property Name="ArticleNumber" Type="String" Nullable="false" MaxLength="10" FixedLength="false" Unicode="true" />
+          <Property Name="Description" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
+          <Property Name="Image" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
+          <Property Name="ProductionPersonCount" Type="Int32" />
+          <Property Name="ProductionWorkshopNumber" Type="Int32" />
+          <Property Name="MinCostForAgent" Type="Decimal" Nullable="false" Precision="10" Scale="2" />
+          <NavigationProperty Name="ProductType" Relationship="user32Model.FK_Product_ProductType" FromRole="Product" ToRole="ProductType" />
+          <NavigationProperty Name="ProductSale" Relationship="user32Model.FK_ProductSale_Product" FromRole="Product" ToRole="ProductSale" />
+        </EntityType>
+        <EntityType Name="ProductSale">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
+          <Property Name="AgentID" Type="Int32" Nullable="false" />
+          <Property Name="ProductID" Type="Int32" Nullable="false" />
+          <Property Name="SaleDate" Type="DateTime" Nullable="false" Precision="0" />
+          <Property Name="ProductCount" Type="Int32" Nullable="false" />
+          <NavigationProperty Name="Agent" Relationship="user32Model.FK_ProductSale_Agent" FromRole="ProductSale" ToRole="Agent" />
+          <NavigationProperty Name="Product" Relationship="user32Model.FK_ProductSale_Product" FromRole="ProductSale" ToRole="Product" />
+        </EntityType>
+        <EntityType Name="ProductType">
+          <Key>
+            <PropertyRef Name="ID" />
+          </Key>
+          <Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
+          <Property Name="Title" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
+          <Property Name="DefectedPercent" Type="Double" />
+          <NavigationProperty Name="Product" Relationship="user32Model.FK_Product_ProductType" FromRole="ProductType" ToRole="Product" />
+        </EntityType>
+        <Association Name="FK_Agent_AgentType">
+          <End Type="user32Model.AgentType" Role="AgentType" Multiplicity="1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Type="user32Model.Agent" Role="Agent" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="AgentType">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="Agent">
+              <PropertyRef Name="AgentTypeID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+        <Association Name="FK_ProductSale_Agent">
+          <End Type="user32Model.Agent" Role="Agent" Multiplicity="1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Type="user32Model.ProductSale" Role="ProductSale" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="Agent">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="ProductSale">
+              <PropertyRef Name="AgentID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+        <Association Name="FK_Product_ProductType">
+          <End Type="user32Model.ProductType" Role="ProductType" Multiplicity="0..1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Type="user32Model.Product" Role="Product" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="ProductType">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="Product">
+              <PropertyRef Name="ProductTypeID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+        <Association Name="FK_ProductSale_Product">
+          <End Type="user32Model.Product" Role="Product" Multiplicity="1">
+            <OnDelete Action="Cascade" />
+          </End>
+          <End Type="user32Model.ProductSale" Role="ProductSale" Multiplicity="*" />
+          <ReferentialConstraint>
+            <Principal Role="Product">
+              <PropertyRef Name="ID" />
+            </Principal>
+            <Dependent Role="ProductSale">
+              <PropertyRef Name="ProductID" />
+            </Dependent>
+          </ReferentialConstraint>
+        </Association>
+      </Schema>
+    </edmx:ConceptualModels>
+    <!-- C-S mapping content -->
+    <edmx:Mappings>
+      <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
+        <EntityContainerMapping StorageEntityContainer="Хранилище user32ModelContainer" CdmEntityContainer="user32Entities">
+          <EntitySetMapping Name="Agent">
+            <EntityTypeMapping TypeName="user32Model.Agent">
+              <MappingFragment StoreEntitySet="Agent">
+                <ScalarProperty Name="Priority" ColumnName="Priority" />
+                <ScalarProperty Name="Logo" ColumnName="Logo" />
+                <ScalarProperty Name="Email" ColumnName="Email" />
+                <ScalarProperty Name="Phone" ColumnName="Phone" />
+                <ScalarProperty Name="DirectorName" ColumnName="DirectorName" />
+                <ScalarProperty Name="KPP" ColumnName="KPP" />
+                <ScalarProperty Name="INN" ColumnName="INN" />
+                <ScalarProperty Name="Address" ColumnName="Address" />
+                <ScalarProperty Name="AgentTypeID" ColumnName="AgentTypeID" />
+                <ScalarProperty Name="Title" ColumnName="Title" />
+                <ScalarProperty Name="ID" ColumnName="ID" />
+              </MappingFragment>
+            </EntityTypeMapping>
+          </EntitySetMapping>
+          <EntitySetMapping Name="AgentType">
+            <EntityTypeMapping TypeName="user32Model.AgentType">
+              <MappingFragment StoreEntitySet="AgentType">
+                <ScalarProperty Name="Image" ColumnName="Image" />
+                <ScalarProperty Name="Title" ColumnName="Title" />
+                <ScalarProperty Name="ID" ColumnName="ID" />
+              </MappingFragment>
+            </EntityTypeMapping>
+          </EntitySetMapping>
+          <EntitySetMapping Name="Product">
+            <EntityTypeMapping TypeName="user32Model.Product">
+              <MappingFragment StoreEntitySet="Product">
+                <ScalarProperty Name="MinCostForAgent" ColumnName="MinCostForAgent" />
+                <ScalarProperty Name="ProductionWorkshopNumber" ColumnName="ProductionWorkshopNumber" />
+                <ScalarProperty Name="ProductionPersonCount" ColumnName="ProductionPersonCount" />
+                <ScalarProperty Name="Image" ColumnName="Image" />
+                <ScalarProperty Name="Description" ColumnName="Description" />
+                <ScalarProperty Name="ArticleNumber" ColumnName="ArticleNumber" />
+                <ScalarProperty Name="ProductTypeID" ColumnName="ProductTypeID" />
+                <ScalarProperty Name="Title" ColumnName="Title" />
+                <ScalarProperty Name="ID" ColumnName="ID" />
+              </MappingFragment>
+            </EntityTypeMapping>
+          </EntitySetMapping>
+          <EntitySetMapping Name="ProductSale">
+            <EntityTypeMapping TypeName="user32Model.ProductSale">
+              <MappingFragment StoreEntitySet="ProductSale">
+                <ScalarProperty Name="ProductCount" ColumnName="ProductCount" />
+                <ScalarProperty Name="SaleDate" ColumnName="SaleDate" />
+                <ScalarProperty Name="ProductID" ColumnName="ProductID" />
+                <ScalarProperty Name="AgentID" ColumnName="AgentID" />
+                <ScalarProperty Name="ID" ColumnName="ID" />
+              </MappingFragment>
+            </EntityTypeMapping>
+          </EntitySetMapping>
+          <EntitySetMapping Name="ProductType">
+            <EntityTypeMapping TypeName="user32Model.ProductType">
+              <MappingFragment StoreEntitySet="ProductType">
+                <ScalarProperty Name="DefectedPercent" ColumnName="DefectedPercent" />
+                <ScalarProperty Name="Title" ColumnName="Title" />
+                <ScalarProperty Name="ID" ColumnName="ID" />
+              </MappingFragment>
+            </EntityTypeMapping>
+          </EntitySetMapping>
+        </EntityContainerMapping>
+      </Mapping>
+    </edmx:Mappings>
+  </edmx:Runtime>
+  <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
+  <Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
+    <Connection>
+      <DesignerInfoPropertySet>
+        <DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
+      </DesignerInfoPropertySet>
+    </Connection>
+    <Options>
+      <DesignerInfoPropertySet>
+        <DesignerProperty Name="ValidateOnBuild" Value="true" />
+        <DesignerProperty Name="EnablePluralization" Value="false" />
+        <DesignerProperty Name="IncludeForeignKeysInModel" Value="true" />
+        <DesignerProperty Name="UseLegacyProvider" Value="false" />
+        <DesignerProperty Name="CodeGenerationStrategy" Value="Нет" />
+      </DesignerInfoPropertySet>
+    </Options>
+    <!-- Diagram content (shape and connector positions) -->
+    <Diagrams></Diagrams>
+  </Designer>
+</edmx:Edmx>

+ 20 - 0
Demoexample/Model1.edmx.diagram

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
+ <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
+  <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
+    <!-- Diagram content (shape and connector positions) -->
+    <edmx:Diagrams>
+      <Diagram DiagramId="5f4ec8f41e20403c9716b5e95aa7f58f" Name="Diagram1" ZoomLevel="64">
+        <EntityTypeShape EntityType="user32Model.Agent" Width="1.5" PointX="3" PointY="1" />
+        <EntityTypeShape EntityType="user32Model.AgentType" Width="1.5" PointX="0.75" PointY="1.875" />
+        <EntityTypeShape EntityType="user32Model.Product" Width="1.5" PointX="3" PointY="6.25" />
+        <EntityTypeShape EntityType="user32Model.ProductSale" Width="1.5" PointX="5.25" PointY="1.625" />
+        <EntityTypeShape EntityType="user32Model.ProductType" Width="1.5" PointX="0.75" PointY="6.875" />
+        <AssociationConnector Association="user32Model.FK_Agent_AgentType" />
+        <AssociationConnector Association="user32Model.FK_ProductSale_Agent" />
+        <AssociationConnector Association="user32Model.FK_Product_ProductType" />
+        <AssociationConnector Association="user32Model.FK_ProductSale_Product" />
+      </Diagram>
+    </edmx:Diagrams>
+  </edmx:Designer>
+</edmx:Edmx>

+ 733 - 0
Demoexample/Model1.tt

@@ -0,0 +1,733 @@
+<#@ template language="C#" debug="false" hostspecific="true"#>
+<#@ include file="EF6.Utility.CS.ttinclude"#><#@ 
+ output extension=".cs"#><#
+
+const string inputFile = @"Model1.edmx";
+var textTransform = DynamicTextTransformation.Create(this);
+var code = new CodeGenerationTools(this);
+var ef = new MetadataTools(this);
+var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
+var	fileManager = EntityFrameworkTemplateFileManager.Create(this);
+var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);
+var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);
+
+if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile))
+{
+    return string.Empty;
+}
+
+WriteHeader(codeStringGenerator, fileManager);
+
+foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
+{
+    fileManager.StartNewFile(entity.Name + ".cs");
+    BeginNamespace(code);
+#>
+<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
+<#=codeStringGenerator.EntityClassOpening(entity)#>
+{
+<#
+    var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity);
+    var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity);
+    var complexProperties = typeMapper.GetComplexProperties(entity);
+
+    if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any())
+    {
+#>
+    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+    public <#=code.Escape(entity)#>()
+    {
+<#
+        foreach (var edmProperty in propertiesWithDefaultValues)
+        {
+#>
+        this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
+<#
+        }
+
+        foreach (var navigationProperty in collectionNavigationProperties)
+        {
+#>
+        this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();
+<#
+        }
+
+        foreach (var complexProperty in complexProperties)
+        {
+#>
+        this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
+<#
+        }
+#>
+    }
+
+<#
+    }
+
+    var simpleProperties = typeMapper.GetSimpleProperties(entity);
+    if (simpleProperties.Any())
+    {
+        foreach (var edmProperty in simpleProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(edmProperty)#>
+<#
+        }
+    }
+
+    if (complexProperties.Any())
+    {
+#>
+
+<#
+        foreach(var complexProperty in complexProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(complexProperty)#>
+<#
+        }
+    }
+
+    var navigationProperties = typeMapper.GetNavigationProperties(entity);
+    if (navigationProperties.Any())
+    {
+#>
+
+<#
+        foreach (var navigationProperty in navigationProperties)
+        {
+            if (navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
+            {
+#>
+    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+<#
+            }
+#>
+    <#=codeStringGenerator.NavigationProperty(navigationProperty)#>
+<#
+        }
+    }
+#>
+}
+<#
+    EndNamespace(code);
+}
+
+foreach (var complex in typeMapper.GetItemsToGenerate<ComplexType>(itemCollection))
+{
+    fileManager.StartNewFile(complex.Name + ".cs");
+    BeginNamespace(code);
+#>
+<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#>
+<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#>
+{
+<#
+    var complexProperties = typeMapper.GetComplexProperties(complex);
+    var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(complex);
+
+    if (propertiesWithDefaultValues.Any() || complexProperties.Any())
+    {
+#>
+    public <#=code.Escape(complex)#>()
+    {
+<#
+        foreach (var edmProperty in propertiesWithDefaultValues)
+        {
+#>
+        this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
+<#
+        }
+
+        foreach (var complexProperty in complexProperties)
+        {
+#>
+        this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
+<#
+        }
+#>
+    }
+
+<#
+    }
+
+    var simpleProperties = typeMapper.GetSimpleProperties(complex);
+    if (simpleProperties.Any())
+    {
+        foreach(var edmProperty in simpleProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(edmProperty)#>
+<#
+        }
+    }
+
+    if (complexProperties.Any())
+    {
+#>
+
+<#
+        foreach(var edmProperty in complexProperties)
+        {
+#>
+    <#=codeStringGenerator.Property(edmProperty)#>
+<#
+        }
+    }
+#>
+}
+<#
+    EndNamespace(code);
+}
+
+foreach (var enumType in typeMapper.GetEnumItemsToGenerate(itemCollection))
+{
+    fileManager.StartNewFile(enumType.Name + ".cs");
+    BeginNamespace(code);
+#>
+<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#>
+<#
+    if (typeMapper.EnumIsFlags(enumType))
+    {
+#>
+[Flags]
+<#
+    }
+#>
+<#=codeStringGenerator.EnumOpening(enumType)#>
+{
+<#
+    var foundOne = false;
+    
+    foreach (MetadataItem member in typeMapper.GetEnumMembers(enumType))
+    {
+        foundOne = true;
+#>
+    <#=code.Escape(typeMapper.GetEnumMemberName(member))#> = <#=typeMapper.GetEnumMemberValue(member)#>,
+<#
+    }
+
+    if (foundOne)
+    {
+        this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1);
+    }
+#>
+}
+<#
+    EndNamespace(code);
+}
+
+fileManager.Process();
+
+#>
+<#+
+
+public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager)
+{
+    fileManager.StartHeader();
+#>
+//------------------------------------------------------------------------------
+// <auto-generated>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#>
+//
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#>
+// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#>
+// </auto-generated>
+//------------------------------------------------------------------------------
+<#=codeStringGenerator.UsingDirectives(inHeader: true)#>
+<#+
+    fileManager.EndBlock();
+}
+
+public void BeginNamespace(CodeGenerationTools code)
+{
+    var codeNamespace = code.VsNamespaceSuggestion();
+    if (!String.IsNullOrEmpty(codeNamespace))
+    {
+#>
+namespace <#=code.EscapeNamespace(codeNamespace)#>
+{
+<#+
+        PushIndent("    ");
+    }
+}
+
+public void EndNamespace(CodeGenerationTools code)
+{
+    if (!String.IsNullOrEmpty(code.VsNamespaceSuggestion()))
+    {
+        PopIndent();
+#>
+}
+<#+
+    }
+}
+
+public const string TemplateId = "CSharp_DbContext_Types_EF6";
+
+public class CodeStringGenerator
+{
+    private readonly CodeGenerationTools _code;
+    private readonly TypeMapper _typeMapper;
+    private readonly MetadataTools _ef;
+
+    public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(typeMapper, "typeMapper");
+        ArgumentNotNull(ef, "ef");
+
+        _code = code;
+        _typeMapper = typeMapper;
+        _ef = ef;
+    }
+
+    public string Property(EdmProperty edmProperty)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            Accessibility.ForProperty(edmProperty),
+            _typeMapper.GetTypeName(edmProperty.TypeUsage),
+            _code.Escape(edmProperty),
+            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
+            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
+    }
+
+    public string NavigationProperty(NavigationProperty navProp)
+    {
+        var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType());
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2} {{ {3}get; {4}set; }}",
+            AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)),
+            navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
+            _code.Escape(navProp),
+            _code.SpaceAfter(Accessibility.ForGetter(navProp)),
+            _code.SpaceAfter(Accessibility.ForSetter(navProp)));
+    }
+    
+    public string AccessibilityAndVirtual(string accessibility)
+    {
+        return accessibility + (accessibility != "private" ? " virtual" : "");
+    }
+    
+    public string EntityClassOpening(EntityType entity)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1}partial class {2}{3}",
+            Accessibility.ForType(entity),
+            _code.SpaceAfter(_code.AbstractOption(entity)),
+            _code.Escape(entity),
+            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
+    }
+    
+    public string EnumOpening(SimpleType enumType)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} enum {1} : {2}",
+            Accessibility.ForType(enumType),
+            _code.Escape(enumType),
+            _code.Escape(_typeMapper.UnderlyingClrType(enumType)));
+        }
+    
+    public void WriteFunctionParameters(EdmFunction edmFunction, Action<string, string, string, string> writeParameter)
+    {
+        var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+        foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable))
+        {
+            var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null";
+            var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")";
+            var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))";
+            writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit);
+        }
+    }
+    
+    public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} IQueryable<{1}> {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            _code.Escape(edmFunction),
+            string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()));
+    }
+    
+    public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});",
+            _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace),
+            edmFunction.NamespaceName,
+            edmFunction.Name,
+            string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()),
+            _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())));
+    }
+    
+    public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray());
+        if (includeMergeOption)
+        {
+            paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption";
+        }
+
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} {1} {2}({3})",
+            AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)),
+            returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            _code.Escape(edmFunction),
+            paramList);
+    }
+    
+    public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
+    {
+        var parameters = _typeMapper.GetParameters(edmFunction);
+        var returnType = _typeMapper.GetReturnType(edmFunction);
+
+        var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));
+        if (includeMergeOption)
+        {
+            callParams = ", mergeOption" + callParams;
+        }
+        
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});",
+            returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
+            edmFunction.Name,
+            callParams);
+    }
+    
+    public string DbSet(EntitySet entitySet)
+    {
+        return string.Format(
+            CultureInfo.InvariantCulture,
+            "{0} virtual DbSet<{1}> {2} {{ get; set; }}",
+            Accessibility.ForReadOnlyProperty(entitySet),
+            _typeMapper.GetTypeName(entitySet.ElementType),
+            _code.Escape(entitySet));
+    }
+
+    public string UsingDirectives(bool inHeader, bool includeCollections = true)
+    {
+        return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
+            ? string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}using System;{1}" +
+                "{2}",
+                inHeader ? Environment.NewLine : "",
+                includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
+                inHeader ? "" : Environment.NewLine)
+            : "";
+    }
+}
+
+public class TypeMapper
+{
+    private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName";
+
+    private readonly System.Collections.IList _errors;
+    private readonly CodeGenerationTools _code;
+    private readonly MetadataTools _ef;
+
+    public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors)
+    {
+        ArgumentNotNull(code, "code");
+        ArgumentNotNull(ef, "ef");
+        ArgumentNotNull(errors, "errors");
+
+        _code = code;
+        _ef = ef;
+        _errors = errors;
+    }
+
+    public static string FixNamespaces(string typeName)
+    {
+        return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial.");
+    }
+
+    public string GetTypeName(TypeUsage typeUsage)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null);
+    }
+
+    public string GetTypeName(EdmType edmType)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: null);
+    }
+
+    public string GetTypeName(TypeUsage typeUsage, string modelNamespace)
+    {
+        return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, string modelNamespace)
+    {
+        return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace);
+    }
+
+    public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace)
+    {
+        if (edmType == null)
+        {
+            return null;
+        }
+
+        var collectionType = edmType as CollectionType;
+        if (collectionType != null)
+        {
+            return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace));
+        }
+
+        var typeName = _code.Escape(edmType.MetadataProperties
+                                .Where(p => p.Name == ExternalTypeNameAttributeName)
+                                .Select(p => (string)p.Value)
+                                .FirstOrDefault())
+            ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ?
+                _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) :
+                _code.Escape(edmType));
+
+        if (edmType is StructuralType)
+        {
+            return typeName;
+        }
+
+        if (edmType is SimpleType)
+        {
+            var clrType = UnderlyingClrType(edmType);
+            if (!IsEnumType(edmType))
+            {
+                typeName = _code.Escape(clrType);
+            }
+
+            typeName = FixNamespaces(typeName);
+
+            return clrType.IsValueType && isNullable == true ?
+                String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) :
+                typeName;
+        }
+
+        throw new ArgumentException("edmType");
+    }
+    
+    public Type UnderlyingClrType(EdmType edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        var primitiveType = edmType as PrimitiveType;
+        if (primitiveType != null)
+        {
+            return primitiveType.ClrEquivalentType;
+        }
+
+        if (IsEnumType(edmType))
+        {
+            return GetEnumUnderlyingType(edmType).ClrEquivalentType;
+        }
+
+        return typeof(object);
+    }
+    
+    public object GetEnumMemberValue(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var valueProperty = enumMember.GetType().GetProperty("Value");
+        return valueProperty == null ? null : valueProperty.GetValue(enumMember, null);
+    }
+    
+    public string GetEnumMemberName(MetadataItem enumMember)
+    {
+        ArgumentNotNull(enumMember, "enumMember");
+        
+        var nameProperty = enumMember.GetType().GetProperty("Name");
+        return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null);
+    }
+
+    public System.Collections.IEnumerable GetEnumMembers(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        var membersProperty = enumType.GetType().GetProperty("Members");
+        return membersProperty != null 
+            ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null)
+            : Enumerable.Empty<MetadataItem>();
+    }
+    
+    public bool EnumIsFlags(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+        
+        var isFlagsProperty = enumType.GetType().GetProperty("IsFlags");
+        return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null);
+    }
+
+    public bool IsEnumType(GlobalItem edmType)
+    {
+        ArgumentNotNull(edmType, "edmType");
+
+        return edmType.GetType().Name == "EnumType";
+    }
+
+    public PrimitiveType GetEnumUnderlyingType(EdmType enumType)
+    {
+        ArgumentNotNull(enumType, "enumType");
+
+        return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null);
+    }
+
+    public string CreateLiteral(object value)
+    {
+        if (value == null || value.GetType() != typeof(TimeSpan))
+        {
+            return _code.CreateLiteral(value);
+        }
+
+        return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks);
+    }
+    
+    public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable<string> types, string sourceFile)
+    {
+        ArgumentNotNull(types, "types");
+        ArgumentNotNull(sourceFile, "sourceFile");
+        
+        var hash = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
+        if (types.Any(item => !hash.Add(item)))
+        {
+            _errors.Add(
+                new CompilerError(sourceFile, -1, -1, "6023",
+                    String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict"))));
+            return false;
+        }
+        return true;
+    }
+    
+    public IEnumerable<SimpleType> GetEnumItemsToGenerate(IEnumerable<GlobalItem> itemCollection)
+    {
+        return GetItemsToGenerate<SimpleType>(itemCollection)
+            .Where(e => IsEnumType(e));
+    }
+    
+    public IEnumerable<T> GetItemsToGenerate<T>(IEnumerable<GlobalItem> itemCollection) where T: EdmType
+    {
+        return itemCollection
+            .OfType<T>()
+            .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName))
+            .OrderBy(i => i.Name);
+    }
+
+    public IEnumerable<string> GetAllGlobalItems(IEnumerable<GlobalItem> itemCollection)
+    {
+        return itemCollection
+            .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i))
+            .Select(g => GetGlobalItemName(g));
+    }
+
+    public string GetGlobalItemName(GlobalItem item)
+    {
+        if (item is EdmType)
+        {
+            return ((EdmType)item).Name;
+        }
+        else
+        {
+            return ((EntityContainer)item).Name;
+        }
+    }
+
+    public IEnumerable<EdmProperty> GetSimpleProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetSimpleProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+    
+    public IEnumerable<EdmProperty> GetComplexProperties(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type);
+    }
+
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(EntityType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+    
+    public IEnumerable<EdmProperty> GetPropertiesWithDefaultValues(ComplexType type)
+    {
+        return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null);
+    }
+
+    public IEnumerable<NavigationProperty> GetNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type);
+    }
+    
+    public IEnumerable<NavigationProperty> GetCollectionNavigationProperties(EntityType type)
+    {
+        return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many);
+    }
+    
+    public FunctionParameter GetReturnParameter(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters");
+        return returnParamsProperty == null
+            ? edmFunction.ReturnParameter
+            : ((IEnumerable<FunctionParameter>)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault();
+    }
+
+    public bool IsComposable(EdmFunction edmFunction)
+    {
+        ArgumentNotNull(edmFunction, "edmFunction");
+
+        var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute");
+        return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null);
+    }
+
+    public IEnumerable<FunctionImportParameter> GetParameters(EdmFunction edmFunction)
+    {
+        return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef);
+    }
+
+    public TypeUsage GetReturnType(EdmFunction edmFunction)
+    {
+        var returnParam = GetReturnParameter(edmFunction);
+        return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage);
+    }
+    
+    public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption)
+    {
+        var returnType = GetReturnType(edmFunction);
+        return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType;
+    }
+}
+
+public static void ArgumentNotNull<T>(T arg, string name) where T : class
+{
+    if (arg == null)
+    {
+        throw new ArgumentNullException(name);
+    }
+}
+#>

+ 58 - 0
Demoexample/NewAgent.xaml

@@ -0,0 +1,58 @@
+<Window x:Class="Demoexample.NewAgent"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Demoexample"
+        mc:Ignorable="d"
+        Icon="img/Приятный шелест.ico"
+        Title="Приятный шелест" Height="700" Width="800">
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="61"/>
+            <ColumnDefinition Width="731*"/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="61"/>
+            <RowDefinition Height="365*"/>
+        </Grid.RowDefinitions>
+        <Image Source="img/Приятный шелест.png" Width="60" Height="60" Grid.Column="0" Grid.Row="0"></Image>
+        <TextBlock Text="Приятный шелест" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" ></TextBlock>
+        <StackPanel Grid.Row ="1" Grid.ColumnSpan="2">
+            <GroupBox Header="Наименование">
+                <TextBox x:Name="name"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Тип агента">
+                <ComboBox x:Name="Type"></ComboBox>
+            </GroupBox>
+            <GroupBox Header="Приоритет">
+                <TextBox x:Name="prioritey"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Логотип">
+                <StackPanel Orientation="Vertical">
+                    <Image x:Name = "imgnew" Width="100" Height="100"></Image>
+                    <Button x:Name="newImg" Content="Добавить фото" Click="newImg_Click" Width="150"></Button>
+                </StackPanel>
+            </GroupBox>
+            <GroupBox Header="Адрес">
+                <TextBox x:Name="address"></TextBox>
+            </GroupBox>
+            <GroupBox Header="ИНН">
+                <TextBox x:Name="inn"></TextBox>
+            </GroupBox>
+            <GroupBox Header="КПП">
+                <TextBox x:Name="kpp"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Имя деректора">
+                <TextBox x:Name="director"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Телефон">
+                <TextBox x:Name="telephone"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Email">
+                <TextBox x:Name="email"></TextBox>
+            </GroupBox>
+            <Button x:Name="add" Content="Добавить нового агента" Click="add_Click"></Button>
+        </StackPanel>
+    </Grid>
+</Window>

+ 75 - 0
Demoexample/NewAgent.xaml.cs

@@ -0,0 +1,75 @@
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Demoexample
+{
+    /// <summary>
+    /// Логика взаимодействия для NewAgent.xaml
+    /// </summary>
+    public partial class NewAgent : Window
+    {
+        string imgg = " ";
+        public Agent buffer;
+        public NewAgent()
+        {
+            InitializeComponent();
+            Type.ItemsSource = DataBase.BaseModel.AgentType.ToList();
+            Type.SelectedValuePath = "ID";
+            Type.DisplayMemberPath = "Title";
+            Type.SelectedIndex = 1;
+        }
+
+        private void newImg_Click(object sender, RoutedEventArgs e)
+        {
+            OpenFileDialog openFileDialog = new OpenFileDialog();
+            openFileDialog.DefaultExt = ".jpg";
+            openFileDialog.Filter = "Изображение | *.jpg; *.png";
+            var result = openFileDialog.ShowDialog();
+            if (result == true)
+            {
+                imgg = openFileDialog.FileName;
+                imgnew.Source = BitmapFrame.Create(new Uri(imgg));
+            }
+        }
+
+        private void add_Click(object sender, RoutedEventArgs e)
+        {
+            List<Agent> pro = DataBase.BaseModel.Agent.ToList();
+            if(Convert.ToInt32(prioritey.Text)<0 && Convert.ToInt32(prioritey.Text) % 10==0)
+            {
+                throw new Exception("Приоритет не может быть отрицательным");
+            }
+            Agent agent = new Agent()
+            {
+                Title = name.Text,
+                AgentTypeID = Type.SelectedIndex,
+                Priority = Convert.ToInt32(prioritey.Text),
+                Logo = imgg,
+                Address = address.Text,
+                INN = inn.Text,
+                KPP = kpp.Text,
+                DirectorName = director.Text,
+                Phone = telephone.Text,
+                Email = email.Text
+            };
+            DataBase.BaseModel.Agent.Add(agent);
+            DataBase.BaseModel.SaveChanges();
+            DataBase.BaseModel = new user32Entities();
+            new MainWindow().Show();
+            this.Close();
+        }
+
+    }
+}

+ 37 - 0
Demoexample/Product.cs

@@ -0,0 +1,37 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Demoexample
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class Product
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public Product()
+        {
+            this.ProductSale = new HashSet<ProductSale>();
+        }
+    
+        public int ID { get; set; }
+        public string Title { get; set; }
+        public Nullable<int> ProductTypeID { get; set; }
+        public string ArticleNumber { get; set; }
+        public string Description { get; set; }
+        public string Image { get; set; }
+        public Nullable<int> ProductionPersonCount { get; set; }
+        public Nullable<int> ProductionWorkshopNumber { get; set; }
+        public decimal MinCostForAgent { get; set; }
+    
+        public virtual ProductType ProductType { get; set; }
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<ProductSale> ProductSale { get; set; }
+    }
+}

+ 26 - 0
Demoexample/ProductSale.cs

@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Demoexample
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class ProductSale
+    {
+        public int ID { get; set; }
+        public int AgentID { get; set; }
+        public int ProductID { get; set; }
+        public System.DateTime SaleDate { get; set; }
+        public int ProductCount { get; set; }
+    
+        public virtual Agent Agent { get; set; }
+        public virtual Product Product { get; set; }
+    }
+}

+ 30 - 0
Demoexample/ProductType.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан по шаблону.
+//
+//     Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
+//     Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Demoexample
+{
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class ProductType
+    {
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+        public ProductType()
+        {
+            this.Product = new HashSet<Product>();
+        }
+    
+        public int ID { get; set; }
+        public string Title { get; set; }
+        public Nullable<double> DefectedPercent { get; set; }
+    
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public virtual ICollection<Product> Product { get; set; }
+    }
+}

+ 59 - 0
Demoexample/Redaction.xaml

@@ -0,0 +1,59 @@
+<Window x:Class="Demoexample.Redaction"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Demoexample"
+        mc:Ignorable="d"
+        Icon="img/Приятный шелест.ico"
+        Title="Приятный шелест" Height="700" Width="800">
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="61"/>
+            <ColumnDefinition Width="731*"/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="61"/>
+            <RowDefinition Height="365*"/>
+        </Grid.RowDefinitions>
+        <Image Source="img/Приятный шелест.png" Width="60" Height="60" Grid.Column="0" Grid.Row="0"></Image>
+        <TextBlock Text="Приятный шелест" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" ></TextBlock>
+        <StackPanel Grid.Row ="1" Grid.ColumnSpan="2">
+            <GroupBox Header="Наименование">
+                <TextBox x:Name="name" Text="{Binding Title}"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Тип агента">
+                <ComboBox x:Name="Type"></ComboBox>
+            </GroupBox>
+            <GroupBox Header="Приоритет">
+                <TextBox x:Name="priority" Text="{Binding Priority}"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Логотип">
+                <StackPanel Orientation="Vertical">
+                    <Image x:Name = "imgnew" Width="100" Height="100" Source="{Binding Logo}"></Image>
+                    <Button x:Name="newImg" Content="Добавить новое фото" Click="newImg_Click" Width="150"></Button>
+                </StackPanel>
+            </GroupBox>
+            <GroupBox Header="Адрес">
+                <TextBox x:Name="address" Text="{Binding Address}"></TextBox>
+            </GroupBox>
+            <GroupBox Header="ИНН">
+                <TextBox x:Name="inn" Text="{Binding INN}"></TextBox>
+            </GroupBox>
+            <GroupBox Header="КПП">
+                <TextBox x:Name="kpp" Text="{Binding KPP}"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Имя деректора">
+                <TextBox x:Name="director" Text="{Binding DirectorName}"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Телефон">
+                <TextBox x:Name="telephone" Text="{Binding Phone}"></TextBox>
+            </GroupBox>
+            <GroupBox Header="Email">
+                <TextBox x:Name="email" Text="{Binding Email}"></TextBox>
+            </GroupBox>
+            <Button x:Name="add" Content="Применить изменения" Click="add_Click"></Button>
+            <Button x:Name="delit" Content="Удолить агента" Click="delit_Click"></Button>
+        </StackPanel>
+    </Grid>
+</Window>

+ 72 - 0
Demoexample/Redaction.xaml.cs

@@ -0,0 +1,72 @@
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Demoexample
+{
+    /// <summary>
+    /// Логика взаимодействия для Redaction.xaml
+    /// </summary>
+    public partial class Redaction : Window
+    {
+        string imgg = "";
+        public Agent buffer;
+        public Redaction(Agent idagent)
+        {
+            InitializeComponent();
+            DataContext = idagent;
+            buffer = idagent;
+            Type.ItemsSource = DataBase.BaseModel.AgentType.ToList();
+            Type.SelectedValuePath = "ID";
+            Type.DisplayMemberPath = "Title";
+            Type.SelectedIndex = (int)buffer.AgentTypeID;
+        }
+
+        private void add_Click(object sender, RoutedEventArgs e)
+        {
+            new MainWindow().Show();
+            this.Close();
+        }
+
+        private void newImg_Click(object sender, RoutedEventArgs e)
+        {
+            OpenFileDialog openFileDialog = new OpenFileDialog();
+            openFileDialog.DefaultExt = ".jpg";
+            openFileDialog.Filter = "Изображение | *.jpg; *.png";
+            var result = openFileDialog.ShowDialog();
+            if (result == true)
+            {
+                imgg = openFileDialog.FileName;
+                imgnew.Source = BitmapFrame.Create(new Uri(imgg));
+            }
+        }
+
+        private void delit_Click(object sender, RoutedEventArgs e)
+        {
+            try
+            {
+                Agent agent = DataBase.BaseModel.Agent.FirstOrDefault(x => x.ID == buffer.ID);
+                DataBase.BaseModel.Agent.Remove(agent);
+                DataBase.BaseModel.SaveChanges();
+                ViewModel viewModel = new ViewModel();
+                new MainWindow().Show();
+                this.Close();
+            }
+            catch
+            {
+                MessageBox.Show("Запись не может быть удалена из-за связей");
+            }
+        }
+    }
+}

二進制
Demoexample/agents/agent_1.png


二進制
Demoexample/agents/agent_10.png


二進制
Demoexample/agents/agent_100.png


二進制
Demoexample/agents/agent_101.png


二進制
Demoexample/agents/agent_102.png


二進制
Demoexample/agents/agent_103.png


二進制
Demoexample/agents/agent_104.png


二進制
Demoexample/agents/agent_105.png


二進制
Demoexample/agents/agent_106.png


二進制
Demoexample/agents/agent_107.png


二進制
Demoexample/agents/agent_108.png


二進制
Demoexample/agents/agent_109.png


二進制
Demoexample/agents/agent_11.png


二進制
Demoexample/agents/agent_110.png


二進制
Demoexample/agents/agent_111.png


二進制
Demoexample/agents/agent_112.png


二進制
Demoexample/agents/agent_113.png


二進制
Demoexample/agents/agent_114.png


二進制
Demoexample/agents/agent_115.png


二進制
Demoexample/agents/agent_116.png


二進制
Demoexample/agents/agent_117.png


二進制
Demoexample/agents/agent_118.png


二進制
Demoexample/agents/agent_119.png


二進制
Demoexample/agents/agent_12.png


二進制
Demoexample/agents/agent_120.png


二進制
Demoexample/agents/agent_121.png


二進制
Demoexample/agents/agent_122.png


二進制
Demoexample/agents/agent_123.png


二進制
Demoexample/agents/agent_124.png


二進制
Demoexample/agents/agent_125.png


二進制
Demoexample/agents/agent_126.png


二進制
Demoexample/agents/agent_127.png


二進制
Demoexample/agents/agent_128.png


二進制
Demoexample/agents/agent_129.png


二進制
Demoexample/agents/agent_13.png


二進制
Demoexample/agents/agent_130.png


二進制
Demoexample/agents/agent_14.png


二進制
Demoexample/agents/agent_15.png


二進制
Demoexample/agents/agent_16.png


二進制
Demoexample/agents/agent_17.png


二進制
Demoexample/agents/agent_18.png


二進制
Demoexample/agents/agent_19.png


二進制
Demoexample/agents/agent_2.png


二進制
Demoexample/agents/agent_20.png


二進制
Demoexample/agents/agent_21.png


二進制
Demoexample/agents/agent_22.png


二進制
Demoexample/agents/agent_23.png


二進制
Demoexample/agents/agent_24.png


二進制
Demoexample/agents/agent_25.png


二進制
Demoexample/agents/agent_26.png


二進制
Demoexample/agents/agent_27.png


二進制
Demoexample/agents/agent_28.png


二進制
Demoexample/agents/agent_29.png


二進制
Demoexample/agents/agent_3.png


二進制
Demoexample/agents/agent_30.png


二進制
Demoexample/agents/agent_31.png


二進制
Demoexample/agents/agent_32.png


二進制
Demoexample/agents/agent_33.png


二進制
Demoexample/agents/agent_34.png


二進制
Demoexample/agents/agent_35.png


二進制
Demoexample/agents/agent_36.png


二進制
Demoexample/agents/agent_37.png


二進制
Demoexample/agents/agent_38.png


二進制
Demoexample/agents/agent_39.png


二進制
Demoexample/agents/agent_4.png


二進制
Demoexample/agents/agent_40.png


二進制
Demoexample/agents/agent_41.png


二進制
Demoexample/agents/agent_42.png


二進制
Demoexample/agents/agent_43.png


二進制
Demoexample/agents/agent_44.png


二進制
Demoexample/agents/agent_45.png


二進制
Demoexample/agents/agent_46.png


二進制
Demoexample/agents/agent_47.png


Some files were not shown because too many files changed in this diff