annotate Source/Templates/BLToolkit.ttinclude @ 9:1e85f66cf767 default tip

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 <#@ assembly name="System.Core" #>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 <#@ assembly name="System.Data" #>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 <#@ import namespace="System.Collections.Generic" #>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 <#@ import namespace="System.Data" #>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 <#@ import namespace="System.Linq" #>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 <#@ import namespace="System.IO" #>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 <#
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 AppDomain.CurrentDomain.AssemblyResolve += (_,args) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 foreach (var a in Assemblies)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 if (args.Name.ToLower().IndexOf(a.Key.ToLower()) >= 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 return System.Reflection.Assembly.LoadFile(a.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 if (DataProviderAssembly != null && args.Name.Split(',')[0] == System.IO.Path.GetFileNameWithoutExtension(DataProviderAssembly))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 return System.Reflection.Assembly.LoadFile(DataProviderAssembly);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 #><#+
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 static Dictionary<string,string> Assemblies = new Dictionary<string,string>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 static Action<GeneratedTextTransformation,string> WriteComment = (tt,s) => tt.WriteLine("//{0}", s);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 static Action<GeneratedTextTransformation,string> WriteSummary = (tt,s) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 if (!string.IsNullOrWhiteSpace(s))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 tt.WriteLine("/// <summary>");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 tt.WriteLine("/// {0}", s);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 tt.WriteLine("/// </summary>");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 static Action<GeneratedTextTransformation,string> WriteUsing = (tt,s) => tt.WriteLine("using {0};", s);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 static Action<GeneratedTextTransformation,string> WriteBeginNamespace = (tt,s) => { tt.WriteLine("namespace {0}", s); tt.WriteLine("{"); };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 static Action<GeneratedTextTransformation> WriteEndNamespace = tt => tt.WriteLine("}");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 static Action<GeneratedTextTransformation,string,string> WriteBeginClass = (tt,cl,bc) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 tt.Write("public partial class {0}", cl);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 if (!string.IsNullOrEmpty(bc))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 tt.Write(" : {0}", bc);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 tt.WriteLine("");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 tt.WriteLine("{");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 static Action<GeneratedTextTransformation> WriteEndClass = tt => tt.WriteLine("}");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 static Func<string,string,string> MakeGenericType = (c,t) => string.Format("{0}<{1}>", c, t);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 static Func<string,string> MakeType = t => t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 delegate void WriteTablePropertyAction(GeneratedTextTransformation tt, string name, string pname, int maxlen, int maxplen, string desc);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 static WriteTablePropertyAction WriteTableProperty = (tt,name,pname,maxlen,maxplen,desc) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 WriteSummary(tt,desc);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 tt.WriteLine("public Table<{0}>{1} {2}{3} {{ get {{ return this.GetTable<{0}>();{1} }} }}", name, tt.LenDiff(maxlen, name), pname, tt.LenDiff(maxplen, pname));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 static Action<GeneratedTextTransformation,string> WriteAttribute = (tt,a) => tt.Write("[{0}]", a);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 static Action<GeneratedTextTransformation> WriteAttributeLine = tt => tt.WriteLine("");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 static string ConnectionString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 static string ConnectionType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 static string DataProviderAssembly = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 string DatabaseName = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 string DataContextName = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 string Namespace = "DataModel";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 string BaseDataContextClass = "DbManager";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 string BaseEntityClass = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 string OneToManyAssociationType = "IEnumerable<{0}>";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 string OwnerToInclude = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 string[] DatabaseQuote = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 bool RenderField = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 bool RenderBackReferences = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 bool RenderForeignKeys = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 bool IsMetadataLoaded;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 int MaxColumnTypeLen;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 int MaxColumnMemberLen;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 static Action<GeneratedTextTransformation,Column,int[],string[]> RenderColumn = (tt,c,maxLens,attrs) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 WriteSummary(tt,c.Description);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 if (maxLens.Sum() > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 if (attrs.Any(_ => _ != null))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 tt.Write("[");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 for (var i = 0; i < attrs.Length; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 if (attrs[i] != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 tt.Write(attrs[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 tt.WriteSpace(maxLens[i] - attrs[i].Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 if (attrs.Skip(i + 1).Any(_ => _ != null))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 tt.Write(", ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 else if (maxLens.Skip(i + 1).Any(_ => _ > 0))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 tt.WriteSpace(2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 else if (maxLens[i] > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 tt.WriteSpace(maxLens[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 if (maxLens.Skip(i + 1).Any(_ => _ > 0))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 tt.WriteSpace(2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 tt.Write("] ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 tt.WriteSpace(maxLens.Sum() + (maxLens.Where(_ => _ > 0).Count() - 1) * 2 + 3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 tt.Write("public {0}{1} {2}", c.Type, tt.LenDiff(tt.MaxColumnTypeLen, c.Type), c.MemberName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 if (tt.RenderField)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 tt.Write(";");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 if (c.ColumnType != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 tt.Write(tt.LenDiff(tt.MaxColumnMemberLen, c.MemberName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 tt.Write("{0} {{ get; set; }}", tt.LenDiff(tt.MaxColumnMemberLen, c.MemberName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 if (c.ColumnType != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 tt.Write(" // {0}", c.ColumnType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 if (c.Length != 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 tt.Write("({0})", c.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 if (c.Precision != 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 if (c.Scale == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 tt.Write("({0})", c.Precision);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 tt.Write("({0},{1})", c.Precision, c.Scale);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 tt.WriteLine("");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 static Action<GeneratedTextTransformation,ForeignKey> RenderForeignKey = (tt,key) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 WriteComment(tt, " " + key.KeyName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 tt.WriteLine("[Association(ThisKey=\"{0}\", OtherKey=\"{1}\", CanBeNull={2})]",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 string.Join(", ", (from c in key.ThisColumns select c.MemberName).ToArray()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 string.Join(", ", (from c in key.OtherColumns select c.MemberName).ToArray()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 key.CanBeNull ? "true" : "false");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 if (key.Attributes.Count > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 WriteAttribute(tt, string.Join(", ", key.Attributes.Distinct().ToArray()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 WriteAttributeLine(tt);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 tt.Write("public ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 if (key.AssociationType == AssociationType.OneToMany)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 tt.Write(tt.OneToManyAssociationType, key.OtherTable.ClassName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 tt.Write(key.OtherTable.ClassName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 tt.Write(" ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 tt.Write(key.MemberName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 if (tt.RenderField)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 tt.WriteLine(";");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 tt.WriteLine(" { get; set; }");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 static Action<GeneratedTextTransformation,Table, bool> RenderTable = (tt,t, renderForeignKeys) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 WriteSummary(tt,t.Description);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 if (t.IsView)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 WriteComment(tt, " View");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 RenderTableAttributes(tt, t);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 WriteBeginClass(tt, t.ClassName, t.BaseClassName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 tt.PushIndent("\t");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 if (t.Columns.Count > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 tt.MaxColumnTypeLen = t.Columns.Values.Max(_ => _.Type.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 tt.MaxColumnMemberLen = t.Columns.Values.Max(_ => _.MemberName.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 var maxLens = new int[]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 t.Columns.Values.Max(_ => _.MemberName == _.ColumnName ? 0 : "MapField('')".Length + _.ColumnName.Length),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 t.Columns.Values.Max(_ => _.IsNullable ? "Nullable".Length : _.IsIdentity ? "Identity".Length : 0),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 t.Columns.Values.Max(_ => _.IsIdentity && _.IsNullable ? "Identity".Length : 0),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 t.Columns.Values.Max(_ => _.IsPrimaryKey ? string.Format("PrimaryKey({0})", _.PKIndex).Length : 0),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 t.Columns.Values.Max(_ => _.Attributes.Count == 0 ? 0 : string.Join(", ", _.Attributes.Distinct().ToArray()).Length),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 foreach (var c in from c in t.Columns.Values orderby c.ID select c)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 var attrs = new string[]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 c.MemberName == c.ColumnName ? null : string.Format("MapField(\"{0}\")", c.ColumnName),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 c.IsNullable ? "Nullable" : c.IsIdentity ? "Identity" : null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 c.IsIdentity && c.IsNullable ? "Identity" : null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 c.IsPrimaryKey ? string.Format("PrimaryKey({0})", c.PKIndex) : null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 c.Attributes.Count == 0 ? null : string.Join(", ", c.Attributes.Distinct().ToArray()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 RenderColumn(tt, c, maxLens, attrs);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 if (renderForeignKeys && t.ForeignKeys.Count > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 foreach (var key in t.ForeignKeys.Values.Where(k => tt.RenderBackReferences || k.BackReference != null))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 tt.WriteLine("");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 RenderForeignKey(tt, key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 tt.PopIndent();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 WriteEndClass(tt);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 static Action<GeneratedTextTransformation,Table> RenderTableAttributes = (tt,t) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 if (t.Attributes.Count > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 WriteAttribute(tt, string.Join(", ", t.Attributes.Distinct().ToArray()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 WriteAttributeLine(tt);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 string tbl = "TableName(";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 if (!string.IsNullOrEmpty(tt.DatabaseName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 tbl += string.Format("Database=\"{0}\", ", tt.DatabaseName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 if (!string.IsNullOrEmpty(t.Owner))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 tbl += string.Format("Owner=\"{0}\", ", t.Owner);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 tbl += string.Format("Name=\"{0}\")", t.TableName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 WriteAttribute(tt, tbl);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 WriteAttributeLine(tt);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 List<string> Usings = new List<string>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 "System",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 "BLToolkit.Data",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 "BLToolkit.Data.Linq",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 "BLToolkit.DataAccess",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 "BLToolkit.Mapping",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 static Action<GeneratedTextTransformation> RenderUsing = tt =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 from ns in tt.Usings.Distinct()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 group ns by ns.Split('.')[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 var groups =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 (from ns in q where ns.Key == "System" select ns).Concat
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 (from ns in q where ns.Key != "System" orderby ns.Key select ns);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 foreach (var gr in groups)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 foreach (var ns in from s in gr orderby s select s)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 WriteUsing(tt, ns);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 tt.WriteLine("");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 Action<GeneratedTextTransformation> BeforeGenerateModel = _ => {};
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 Action<GeneratedTextTransformation> AfterGenerateModel = _ => {};
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 Action<GeneratedTextTransformation> BeforeWriteTableProperty = _ => {};
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 Action<GeneratedTextTransformation> AfterWriteTableProperty = _ => {};
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 void GenerateModel()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 if (ConnectionString != null) ConnectionString = ConnectionString.Trim();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 if (DataContextName != null) DataContextName = DataContextName. Trim();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 if (string.IsNullOrEmpty(ConnectionString)) { Error("ConnectionString cannot be empty."); return; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 if (string.IsNullOrEmpty(DataContextName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 DataContextName = "DataContext";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 LoadMetadata();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 BeforeGenerateModel(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 WriteComment(this, "---------------------------------------------------------------------------------------------------");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 WriteComment(this, " <auto-generated>");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 WriteComment(this, " This code was generated by BLToolkit template for T4.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 WriteComment(this, " Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 WriteComment(this, " </auto-generated>");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 WriteComment(this, "---------------------------------------------------------------------------------------------------");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 RenderUsing(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 WriteBeginNamespace(this, Namespace);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 PushIndent("\t");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 WriteBeginClass(this, DataContextName, BaseDataContextClass);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 var tlist = (from t in Tables.Values orderby t.TableName select t).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 var maxlen = tlist.Max(_ => _.ClassName.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 var maxplen = tlist.Max(_ => (_.DataContextPropertyName ?? _.ClassName).Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 PushIndent("\t");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 BeforeWriteTableProperty(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 foreach (var t in tlist)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 WriteTableProperty(this, t.ClassName, t.DataContextPropertyName ?? t.ClassName, maxlen, maxplen, t.Description);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 AfterWriteTableProperty(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 PopIndent();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 WriteEndClass(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 foreach (var t in tlist)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 WriteLine("");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 RenderTable(this, t, RenderForeignKeys);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 PopIndent();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 WriteEndNamespace(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 AfterGenerateModel(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 string LenDiff(int max, string str)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 var s = "";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 while (max-- > str.Length)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 s += " ";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 return s;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 void WriteSpace(int len)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 while (len-- > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 Write(" ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 List<T> CreateList<T>(T item)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 return new List<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 Func<System.Data.IDbConnection> GetConnectionObject = () =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 Type connType = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 if (DataProviderAssembly != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 var assembly = System.Reflection.Assembly.LoadFile(DataProviderAssembly);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 connType = assembly.GetType(ConnectionType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 ?? assembly.GetType(ConnectionType.Substring(0, ConnectionType.IndexOf(",")));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 catch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 if (connType == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 connType = Type.GetType(ConnectionType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 return (System.Data.IDbConnection)Activator.CreateInstance(connType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 System.Data.IDbConnection GetConnection()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 var conn = GetConnectionObject();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 conn.ConnectionString = ConnectionString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 conn.Open();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 return conn;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 void LoadMetadata()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 if (IsMetadataLoaded)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 IsMetadataLoaded = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 if (!string.IsNullOrEmpty(DataProviderAssembly) && !DataProviderAssembly.Contains(":") && DataProviderAssembly.Contains(".."))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 string path = this.Host.ResolvePath("");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 DataProviderAssembly = Path.GetFullPath(Path.Combine(path, DataProviderAssembly));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 catch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 BeforeLoadMetadata(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 LoadServerMetadata();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 if (DatabaseQuote != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 foreach (var t in Tables.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 t.TableName = string.Format("{1}{0}{2}", t.TableName, DatabaseQuote.FirstOrDefault(), DatabaseQuote.Skip(1).FirstOrDefault() ?? DatabaseQuote.FirstOrDefault());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 foreach (var c in t.Columns.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 c.ColumnName = string.Format("{1}{0}{2}", c.ColumnName, DatabaseQuote.FirstOrDefault(), DatabaseQuote.Skip(1).FirstOrDefault() ?? DatabaseQuote.FirstOrDefault());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 foreach (var t in Tables.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 if (t.ClassName.Contains(" "))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 var ss = t.ClassName.Split(' ').Where(_ => _.Trim().Length > 0).Select(_ => char.ToUpper(_[0]) + _.Substring(1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 t.ClassName = string.Join("", ss.ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 foreach (var t in Tables.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 foreach (var key in t.ForeignKeys.Values.ToList())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 if (!key.KeyName.EndsWith("_BackReference"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 key.OtherTable.ForeignKeys.Add(key.KeyName + "_BackReference", key.BackReference = new ForeignKey
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 KeyName = key.KeyName + "_BackReference",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 MemberName = key.MemberName + "_BackReference",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 AssociationType = AssociationType.Auto,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 OtherTable = t,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 ThisColumns = key.OtherColumns,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 OtherColumns = key.ThisColumns,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 foreach (var t in Tables.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 foreach (var key in t.ForeignKeys.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 if (key.BackReference != null && key.AssociationType == AssociationType.Auto)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 if (key.ThisColumns.All(_ => _.IsPrimaryKey))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 if (t.Columns.Values.Count(_ => _.IsPrimaryKey) == key.ThisColumns.Count)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 key.AssociationType = AssociationType.OneToOne;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 key.AssociationType = AssociationType.ManyToOne;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 key.AssociationType = AssociationType.ManyToOne;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 key.CanBeNull = key.ThisColumns.All(_ => _.IsNullable);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 foreach (var t in Tables.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 foreach (var key in t.ForeignKeys.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 var name = key.MemberName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 if (key.BackReference != null && key.ThisColumns.Count == 1 && key.ThisColumns[0].MemberName.ToLower().EndsWith("id"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 name = key.ThisColumns[0].MemberName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 name = name.Substring(0, name.Length - "id".Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 if (!t.ForeignKeys.Values.Select(_ => _.MemberName).Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 t.Columns. Values.Select(_ => _.MemberName)).Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 new[] { t.ClassName }).Any(_ => _ == name))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 name = key.MemberName;;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 if (name == key.MemberName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 if (name.StartsWith("FK_"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 name = name.Substring(3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 if (name.EndsWith("_BackReference"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 name = name.Substring(0, name.Length - "_BackReference".Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 name = string.Join("", name.Split('_').Where(_ => _.Length > 0 && _ != t.TableName).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 if (name.Length > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 name = key.AssociationType == AssociationType.OneToMany ? PluralizeAssociationName(name) : SingularizeAssociationName(name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 if (name.Length != 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 !t.ForeignKeys.Values.Select(_ => _.MemberName).Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 t.Columns. Values.Select(_ => _.MemberName)).Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 new[] { t.ClassName }).Any(_ => _ == name))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 key.MemberName = name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 if (Tables.Values.SelectMany(_ => _.ForeignKeys.Values).Any(_ => _.AssociationType == AssociationType.OneToMany))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 Usings.Add("System.Collections.Generic");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 var keyWords = new HashSet<string>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", "enum",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", "foreach", "goto",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 "if", "implicit", "in", "int", "interface", "internal", "is", "lock", "long", "new",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 "null", "object", "operator", "out", "override", "params", "private", "protected", "public", "readonly",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 "ref", "return", "sbyte", "sealed", "short", "sizeof", "stackalloc", "static", "struct", "switch",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 "using", "virtual", "volatile", "void", "while"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 foreach (var t in Tables.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 if (keyWords.Contains(t.ClassName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 t.ClassName = "@" + t.ClassName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 if (keyWords.Contains(t.DataContextPropertyName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 t.DataContextPropertyName = "@" + t.DataContextPropertyName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 foreach (var col in t.Columns.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 if (keyWords.Contains(col.MemberName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 col.MemberName = "@" + col.MemberName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 AfterLoadMetadata(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 Func<string,string> PluralizeAssociationName = _ => _ + "s";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 Func<string,string> SingularizeAssociationName = _ => _;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 Action<GeneratedTextTransformation> BeforeLoadMetadata = _ => {};
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 Action<GeneratedTextTransformation> AfterLoadMetadata = _ => {};
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 Dictionary<string,Table> Tables = new Dictionary<string,Table>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 public partial class Table
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566 public string Owner;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 public string TableName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568 public string ClassName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 public string DataContextPropertyName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 public string BaseClassName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 public bool IsView;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572 public string Description;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 public List<string> Attributes = new List<string>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 public Dictionary<string,Column> Columns = new Dictionary<string,Column>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 public Dictionary<string,ForeignKey> ForeignKeys = new Dictionary<string,ForeignKey>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 public partial class Column
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582 public string ColumnName; // Column name in database
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 public string MemberName; // Member name of the generated class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584 public bool IsNullable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 public bool IsIdentity;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586 public string Type; // Type of the generated member
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 public string ColumnType; // Type of the column in database
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 public bool IsClass;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 public DbType DbType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590 public SqlDbType SqlDbType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 public long Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 public int Precision;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 public int Scale;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594 public string Description;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596 public int PKIndex = -1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 public List<string> Attributes = new List<string>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 public bool IsPrimaryKey { get { return PKIndex >= 0; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602 public enum AssociationType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604 Auto,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605 OneToOne,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 OneToMany,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 ManyToOne,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610 public partial class ForeignKey
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612 public string KeyName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 public string MemberName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614 public Table OtherTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615 public List<Column> ThisColumns = new List<Column>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 public List<Column> OtherColumns = new List<Column>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617 public List<string> Attributes = new List<string>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 public bool CanBeNull = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 public ForeignKey BackReference;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621 private AssociationType _associationType = AssociationType.Auto;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622 public AssociationType AssociationType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 get { return _associationType; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627 _associationType = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 if (BackReference != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 switch (value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 case AssociationType.Auto : BackReference.AssociationType = AssociationType.Auto; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 case AssociationType.OneToOne : BackReference.AssociationType = AssociationType.OneToOne; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 case AssociationType.OneToMany : BackReference.AssociationType = AssociationType.ManyToOne; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636 case AssociationType.ManyToOne : BackReference.AssociationType = AssociationType.OneToMany; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 #>