powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# EF4 запрос по имени таблицы
25 сообщений из 223, страница 1 из 9
c# EF4 запрос по имени таблицы
    #38818983
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Предложите пожалуйста пути решения вопроса.

Имеется приложение, в котором реализован частично mapping порядка 40 таблиц базы данных MSSQL. Всего в этой базе данных порядка 300 таблиц.
Теперь появилась необходимость в приложении реализовать возможность получения данных из этих таблиц. Соответственно в идеале нужно делать mapping всех остальных таблиц, но для этого нужно переехать жить на работу. Так как в этих таблицах хренова куча полей.

Мои решения:
- Реализовать средствами EF Data Model базы данных, то есть слепок. Такой вариант не очень нравится поскольку делает винегрет из приложения.

- Сформировать список из названий таблиц и путем SQL поднимать данные из БД.
Только не пойму как это можно реализовать через EF?
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38818992
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoСоответственно в идеале нужно делать mapping всех остальных таблиц, но для этого нужно переехать жить на работу. Так как в этих таблицах хренова куча полей.Переезжать не надо.

Кодогенерация контекста базы данных Entity Framework
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819077
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, так есть же штатный кодогенератор, накой костыли?
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819101
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей К, так есть же штатный кодогенератор, накой костыли?уг
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819103
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но это моё субъективное мнение. Хотите - пользуйтесь, мне фиолетово. :-)
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819169
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Куг
А твоё поделие чем лучше?

Алексей КНо это моё субъективное мнение. Хотите - пользуйтесь, мне фиолетово. :-)
Не гунди, ответь лучше на мой вопрос :)
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819171
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Куг
А твоё поделие чем лучше? Тем, что оно идеально!
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819223
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНу вот смотри, что в нём плохого? Он прост, как дверь...
Код, простой как дверь
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
 
namespace DbGenerator
{
    public class EFCodeWriterDataContractInfo
    {
        public string Namespace { get; set; }
 
        public bool IsDataMemberRequired { get; set; }
 
        public bool IsReferencesInDataContract { get; set; }
    }
 
    public class EFCodeWriterNewtonsoftJsonInfo
    {
        public bool IsReferencesInDataContract { get; set; }
    }
 
    public class EFCodeWriterPropertyChangedInfo
    {
        public string MethodName { get; set; }
 
        public EFCodeWriterPropertyChangedInfo()
        {
            MethodName = "OnPropertyChanged";
        }
    }
 
    public class EFCodeWriter : ICodeWriter
    {
        #region Configuration
 
        public string RequiredMessageConstName { get; set; }
 
        public string RequiredMessage { get; set; }
 
        public string MaxTextLengthMessageConstName { get; set; }
 
        public string MaxTextLengthMessage { get; set; }
 
        public event Action<CodeNamespaceImportCollection> ConvertImports = delegate { };
 
 
        public string ContextClassName { get; set; }
 
        public string TableQueryTypeName { get; set; }
 
        public string TableQueryFactoryMethodName { get; set; }
 
        public bool IsOnModelCreatingInternalInvoke { get; set; }
 
        public string GetPropertyNameExpressionPattern { get; set; }
 
 
        public EFCodeWriterDataContractInfo DataContract { get; set; }
 
        public EFCodeWriterNewtonsoftJsonInfo NewtonsoftJson { get; set; }
 
        public EFCodeWriterPropertyChangedInfo PropertyChanged { get; set; }
 
 
        public string CollectionType { get; set; }
 
        public string ReferencePropertyNamePattern { get; set; }
 
        public string BackReferencePropertyNamePattern { get; set; }
 
 
        public EFCodeWriter()
        {
            RequiredMessageConstName = "RequiredMessage";
            RequiredMessage = "Не указано обязательное поле {0}.";
 
            MaxTextLengthMessageConstName = "MaxTextLengthMessage";
            MaxTextLengthMessage = "Превышена максимальная длина строки {1} символов в поле {0}.";
 
            TableQueryTypeName = "IDbSet";
            TableQueryFactoryMethodName = "SetEx";
            GetPropertyNameExpressionPattern = "p => p.{0}";
 
            CollectionType = "List";
            ReferencePropertyNamePattern = "{0}_Reference";
            BackReferencePropertyNamePattern = "{0}_{1}_Reference";
        }
 
        #endregion
 
        #region ICodeWriter Members
 
        public Metadata Metadata { get; set; }
 
        public CodeNamespace TargetNamespace { get; set; }
 
        public void Write()
        {
            WriteImports();
            WriteContextClass();
 
            foreach (var table in Tables)
                WriteTableClass(table);
        }
 
        #endregion
 
        #region Metadata
 
        IEnumerable<Table> Tables
        {
            get { return Metadata.Tables.Values.OrderBy(t => t.ClassName); }
        }
 
        #endregion
 
        #region Write Imports
 
        void WriteImports()
        {
            WriteImport("System");
            WriteImport("System.Collections.Generic");
            WriteImport("System.ComponentModel.DataAnnotations");
            WriteImport("System.ComponentModel.DataAnnotations.Schema");
            WriteImport("System.Data.Entity");
 
            if (DataContract != null)
                WriteImport("System.Runtime.Serialization");
 
            if (NewtonsoftJson != null)
                WriteImport("Newtonsoft.Json");
 
            WriteImport("SspMain");
 
            ConvertImports(TargetNamespace.Imports);
        }
 
        void WriteImport(string ns)
        {
            TargetNamespace.Imports.Add(new CodeNamespaceImport(ns));
        }
 
        #endregion
 
        #region Write Context
 
        void WriteContextClass()
        {
            var contextClass = new CodeTypeDeclaration(ContextClassName) { IsPartial = true };
 
            foreach (var table in Tables)
                WriteContextTableProperty(contextClass, table);
 
            WriteContextOnModelCreatingMethod(contextClass);
            WriteContextRequiredFieldMessage(contextClass);
 
            TargetNamespace.Types.Add(contextClass);
        }
 
        void WriteContextTableProperty(CodeTypeDeclaration contextClass, Table table)
        {
            var tableClass = new CodeTypeReference(table.ClassName);
 
            var getDbSet = new CodeMethodInvokeExpression(
                new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), TableQueryFactoryMethodName, tableClass)
            );
 
            var property = new CodeMemberProperty
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Final,
                Type = new CodeTypeReference(TableQueryTypeName, tableClass),
                Name = table.ClassName
            };
 
            property.GetStatements.Add(new CodeMethodReturnStatement(getDbSet));
 
            contextClass.Members.Add(property);
        }
 
        void WriteContextRequiredFieldMessage(CodeTypeDeclaration contextClass)
        {
            var requiredMessage = new CodeMemberField(typeof(string), RequiredMessageConstName)
            {
                Attributes = MemberAttributes.Const | MemberAttributes.Assembly,
                InitExpression = new CodePrimitiveExpression(RequiredMessage)
            };
 
            contextClass.Members.Add(requiredMessage);
 
            var maxTextLengthMessage = new CodeMemberField(typeof(string), MaxTextLengthMessageConstName)
            {
                Attributes = MemberAttributes.Const | MemberAttributes.Assembly,
                InitExpression = new CodePrimitiveExpression(MaxTextLengthMessage)
            };
 
            contextClass.Members.Add(maxTextLengthMessage);
        }
 
        void WriteContextOnModelCreatingMethod(CodeTypeDeclaration contextClass)
        {
            var method = new CodeMemberMethod
            {
                Name = "OnModelCreating",
                Attributes = MemberAttributes.Override | MemberAttributes.Family
            };
 
            method.Parameters.Add(new CodeParameterDeclarationExpression("DbModelBuilder", "modelBuilder"));
 
            method.Statements.Add(new CodeMethodInvokeExpression(
                new CodeMethodReferenceExpression(new CodeBaseReferenceExpression(), "OnModelCreating"),
                new CodeVariableReferenceExpression("modelBuilder")
            ));
 
            WriteDecimalColumnsMapping(method);
 
            if (IsOnModelCreatingInternalInvoke)
                method.Statements.Add(new CodeMethodInvokeExpression(
                    new CodeMethodReferenceExpression { MethodName = "OnModelCreatingInternal" },
                    new CodeVariableReferenceExpression("modelBuilder")
                ));
 
            contextClass.Members.Add(method);
        }
 
        void WriteDecimalColumnsMapping(CodeMemberMethod method)
        {
            var decimalColumns =
                from t in Tables
                from c in t.Columns.Values
                where (Nullable.GetUnderlyingType(c.Db.ClrType) ?? c.Db.ClrType) == typeof(decimal)
                orderby t.Db.Name.NameWithSchema, c.Db.OrdinalPosition
                select new { Table = t, Column = c };
 
            foreach (var item in decimalColumns)
            {
                var modelBuilder = new CodeVariableReferenceExpression("modelBuilder");
 
                var entity = new CodeMethodInvokeExpression(
                    new CodeMethodReferenceExpression(
                        modelBuilder,
                        "Entity",
                        new CodeTypeReference(item.Table.ClassName)
                    )
                );
 
                var property = new CodeMethodInvokeExpression(
                    entity,
                    "Property",
                    new CodeSnippetExpression(
                        string.Format(GetPropertyNameExpressionPattern, item.Column.PropertyName)
                    )
                );
 
                var hasPrecision = new CodeMethodInvokeExpression(
                    property,
                    "HasPrecision",
                    new CodePrimitiveExpression(item.Column.Db.Precision),
                    new CodePrimitiveExpression(item.Column.Db.Scale)
                );
 
                method.Statements.Add(hasPrecision);
            }
        }
 
        #endregion
 
        #region Write Table
 
        void WriteTableClass(Table table)
        {
            var tableClass = new CodeTypeDeclaration(table.ClassName) { IsPartial = true };
 
            tableClass.CustomAttributes.Add(new CodeAttributeDeclaration(
                "Table",
                new CodeAttributeArgument(new CodePrimitiveExpression(table.Db.Name.Name)),
                new CodeAttributeArgument("Schema", new CodePrimitiveExpression(table.Db.Name.Schema))
            ));
 
            if (DataContract != null)
            {
                if (DataContract.Namespace == "")
                    tableClass.CustomAttributes.Add(new CodeAttributeDeclaration("DataContract"));
                else
                    tableClass.CustomAttributes.Add(new CodeAttributeDeclaration(
                        "DataContract",
                        new CodeAttributeArgument("Namespace", new CodePrimitiveExpression(DataContract.Namespace))
                    ));
            }
 
            foreach (var column in table.Columns.Values.OrderBy(v => v.Db.OrdinalPosition))
                WriteTableColumnProperty(tableClass, table, column);
 
            foreach (var reference in table.References.OrderBy(r => r.RefTable.Db.Name.NameWithSchema))
                WriteTableReferenceProperty(tableClass, reference);
 
            foreach (var reference in table.BackReferences.OrderBy(r => r.Table.Db.Name.NameWithSchema))
                WriteTableBackReferenceProperty(tableClass, reference);
 
            WriteTablePropertyChangedImpl(tableClass);
 
            TargetNamespace.Types.Add(tableClass);
        }
 
        void WriteTablePropertyChangedImpl(CodeTypeDeclaration tableClass)
        {
            if (PropertyChanged == null)
                return;
 
            tableClass.BaseTypes.Add(new CodeTypeReference(typeof(INotifyPropertyChanged)));
 
            var propertyChanged = new CodeMemberEvent
            {
                Name = "PropertyChanged",
                Type = new CodeTypeReference(typeof(PropertyChangedEventHandler)),
                Attributes = MemberAttributes.Public
            };
 
            var onPropertyChanged = new CodeMemberMethod
            {
                Name = PropertyChanged.MethodName,
                Attributes = MemberAttributes.Family | MemberAttributes.Overloaded
            };
 
            var onPropertyChangedPropertyName =
                new CodeParameterDeclarationExpression(typeof(string), "propertyName");
 
            onPropertyChanged.Parameters.Add(onPropertyChangedPropertyName);
 
            var onPropertyChangedH = new CodeVariableDeclarationStatement(
                propertyChanged.Type,
                "h",
                new CodeFieldReferenceExpression(null, propertyChanged.Name)
            );
 
            onPropertyChanged.Statements.Add(onPropertyChangedH);
 
            onPropertyChanged.Statements.Add(new CodeConditionStatement(
                new CodeBinaryOperatorExpression(
                    new CodeVariableReferenceExpression(onPropertyChangedH.Name),
                    CodeBinaryOperatorType.IdentityInequality,
                    new CodePrimitiveExpression(null)
                ),
                new CodeExpressionStatement(new CodeMethodInvokeExpression(
                    new CodeMethodReferenceExpression(null, onPropertyChangedH.Name),
                    new CodeThisReferenceExpression(),
                    new CodeObjectCreateExpression(
                        typeof(PropertyChangedEventArgs),
                        new CodeVariableReferenceExpression(onPropertyChangedPropertyName.Name)
                    )
                ))
            ));
 
            tableClass.Members.Add(onPropertyChanged);
            tableClass.Members.Add(propertyChanged);
        }
 
        void WriteTableColumnProperty(CodeTypeDeclaration tableClass, Table table, Column column)
        {
            var property = WriteProperty(
                tableClass,
                new CodeTypeReference(column.Db.ClrType),
                column.PropertyName
            );
 
            var columnAttribute = new CodeAttributeDeclaration(
                "Column",
                new CodeAttributeArgument(new CodePrimitiveExpression(column.Db.Name))
            );
 
            if (column.Db.PkIndex.HasValue)
            {
                property.CustomAttributes.Add(new CodeAttributeDeclaration("Key"));
 
                columnAttribute.Arguments.Add(
                    new CodeAttributeArgument("Order", new CodePrimitiveExpression(column.Db.PkIndex.Value))
                );
 
                var reference = table.References
                    .FirstOrDefault(r => r.Columns.Contains(column) && r.Type == ReferenceTypes.OneToOne);
 
                if (reference != null)
                    property.CustomAttributes.Add(new CodeAttributeDeclaration(
                        "ForeignKey",
                        new CodeAttributeArgument(
                            new CodePrimitiveExpression(GetTableReferencePropertyName(reference))
                        )
                    ));
            }
 
            property.CustomAttributes.Add(columnAttribute);
 
            if (column.Db.PkIndex.HasValue || column.Db.DbGenerationMode != DbGenerationModes.None)
                property.CustomAttributes.Add(new CodeAttributeDeclaration(
                    "DatabaseGenerated",
                    new CodeAttributeArgument(new CodeFieldReferenceExpression(
                        new CodeTypeReferenceExpression("DatabaseGeneratedOption"),
                        column.Db.DbGenerationMode.ToString()
                    ))
                ));
 
            if (column.Db.IsRowVersion)
                property.CustomAttributes.Add(new CodeAttributeDeclaration("ConcurrencyCheck"));
 
            var isRequired =
                column.Db.IsNullable == false &&
                column.Db.DbGenerationMode == DbGenerationModes.None &&
                column.Db.PkIndex.HasValue == false;
 
            if (isRequired)
                property.CustomAttributes.Add(new CodeAttributeDeclaration(
                    "Required",
                    new CodeAttributeArgument(
                        "ErrorMessage",
                        new CodeFieldReferenceExpression(
                            new CodeTypeReferenceExpression(ContextClassName),
                            RequiredMessageConstName
                        )
                    )
                ));
 
            if (column.Db.ClrType == typeof(string) && column.Db.MaxTextLength.HasValue)
                property.CustomAttributes.Add(new CodeAttributeDeclaration(
                    "MaxLength",
                    new CodeAttributeArgument(new CodePrimitiveExpression(column.Db.MaxTextLength)),
                    new CodeAttributeArgument(
                        "ErrorMessage",
                        new CodeFieldReferenceExpression(
                            new CodeTypeReferenceExpression(ContextClassName),
                            MaxTextLengthMessageConstName
                        )
                    )
                ));
 
            if (DataContract != null)
            {
                if (isRequired && DataContract.IsDataMemberRequired)
                    property.CustomAttributes.Add(new CodeAttributeDeclaration(
                        "DataMember",
                        new CodeAttributeArgument("IsRequired", new CodePrimitiveExpression(true))
                    ));
                else
                    property.CustomAttributes.Add(new CodeAttributeDeclaration("DataMember"));
            }
        }
 
        void WriteTableReferenceProperty(CodeTypeDeclaration tableClass, Reference reference)
        {
            var property = WriteProperty(
                tableClass,
                new CodeTypeReference(reference.RefTable.ClassName),
                GetTableReferencePropertyName(reference)
            );
 
            property.CustomAttributes.Add(new CodeAttributeDeclaration(
                "ForeignKey",
                new CodeAttributeArgument(
                    new CodePrimitiveExpression(string.Join(",", reference.Columns.Select(c => c.PropertyName)))
                )
            ));
 
            WriteTableReferenceSerializationInfo(property);
        }
 
        void WriteTableBackReferenceProperty(CodeTypeDeclaration tableClass, Reference reference)
        {
            var type = reference.Type == ReferenceTypes.OneToOne
                ? new CodeTypeReference(reference.Table.ClassName)
                : new CodeTypeReference(CollectionType, new CodeTypeReference(reference.Table.ClassName));
 
            var property = WriteProperty(tableClass, type, GetTableBackReferencePropertyName(reference));
 
            property.CustomAttributes.Add(new CodeAttributeDeclaration(
                "InverseProperty",
                new CodeAttributeArgument(
                    new CodePrimitiveExpression(GetTableReferencePropertyName(reference))
 
                )
            ));
 
            WriteTableReferenceSerializationInfo(property);
        }
 
        void WriteTableReferenceSerializationInfo(CodeMemberProperty property)
        {
            if (NewtonsoftJson != null && NewtonsoftJson.IsReferencesInDataContract == false)
                property.CustomAttributes.Add(new CodeAttributeDeclaration("JsonIgnore"));
 
            if (DataContract != null && DataContract.IsReferencesInDataContract)
                property.CustomAttributes.Add(new CodeAttributeDeclaration("DataMember"));
        }
 
        string GetTableReferencePropertyName(Reference reference)
        {
            return string.Format(
                ReferencePropertyNamePattern,
                string.Join("_", reference.Columns.Select(c => c.PropertyName))
            );
        }
 
        string GetTableBackReferencePropertyName(Reference reference)
        {
            return string.Format(
                BackReferencePropertyNamePattern,
                reference.Table.ClassName,
                string.Join("_", reference.Columns.Select(c => c.PropertyName))
            );
        }
 
        #endregion
 
        #region Utils
 
        CodeMemberProperty WriteProperty(CodeTypeDeclaration parentClass, CodeTypeReference propertyType, string propertyName)
        {
            var field = new CodeMemberField(
                propertyType,
                propertyName + "__Field"
            );
 
            parentClass.Members.Add(field);
 
            var result = new CodeMemberProperty
            {
                Type = propertyType,
                Name = propertyName,
                Attributes = MemberAttributes.Public | MemberAttributes.Final
            };
 
            result.GetStatements.Add(new CodeMethodReturnStatement(
                new CodeFieldReferenceExpression { FieldName = field.Name }
            ));
 
            result.SetStatements.Add(new CodeAssignStatement(
                new CodeFieldReferenceExpression { FieldName = field.Name },
                new CodePropertySetValueReferenceExpression()
            ));
 
            if (PropertyChanged != null)
                result.SetStatements.Add(new CodeMethodInvokeExpression(
                    new CodeMethodReferenceExpression { MethodName = PropertyChanged.MethodName },
                    new CodePrimitiveExpression(propertyName)
                ));
 
            parentClass.Members.Add(result);
 
            return result;
        }
 
        #endregion
    }
}

...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819226
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТем, что оно идеально!
Опасный аргумент ... но я зайду с другой стороны. Чем же не идеален родной студийный инструмент? ))
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819236
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу вот смотри, что в нём плохого? Он прост, как дверь...
Код просто великолепен, но не в этом суть. Зачем мне нужны эти педали, если они уже есть от вендора? Один клик и получили контекст.
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819241
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КТем, что оно идеально!
Опасный аргумент ... но я зайду с другой стороны. Чем же не идеален родной студийный инструмент? ))Такая архитектура бесит: Database => EDMX => T4 => C#

Такая архитектура не бесит: Database => T4 => C#
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819282
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУОдин клик и получили контекст.Но не такой, как я хочу.
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819367
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТакая архитектура бесит: Database => EDMX => T4 => C#

В 7-ом EF, слава Богу, не будет никаких EDMX. Даж не знаю, что будет делать МСУ, видимо останется пожизненно на 6-ке
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819396
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТакая архитектура не бесит: Database => T4 => C#
Так речь про Code First. А Database First на помойку :)

hVosttВ 7-ом EF, слава Богу, не будет никаких EDMX. Даж не знаю, что будет делать МСУ, видимо останется пожизненно на 6-ке
Так пох на edmx, пусть делают дизайнер, вот что важно! )
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819408
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КТакая архитектура не бесит: Database => T4 => C#
Так речь про Code First. А Database First на помойку :)Речь про Database-First + DbContext API .
МСУhVosttВ 7-ом EF, слава Богу, не будет никаких EDMX. Даж не знаю, что будет делать МСУ, видимо останется пожизненно на 6-ке
Так пох на edmx, пусть делают дизайнер, вот что важно! )Работай с Делфи, там с дизайнерами всё в порядке. :-)
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819570
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТак пох на edmx, пусть делают дизайнер, вот что важно! )

Дизайнер вроде как обещают... Работать будет напрямую с классами, и мне не в домёк нафиг он нужен.
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819627
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КРечь про Database-First + DbContext API .
Database Firtst накрылось медным тазом, уже обсуждали ведь. Будет только Code First. С возможностью создавать контекст по БД.

Алексей КРаботай с Делфи, там с дизайнерами всё в порядке. :-)
Не хочу дельфи :)

hVosttМСУТак пох на edmx, пусть делают дизайнер, вот что важно! )
Дизайнер вроде как обещают... Работать будет напрямую с классами, и мне не в домёк нафиг он нужен.
Я тоже слышал, что будет. Если будет, то зачёт. Ковыряться в гавноклассах тоскливо, щелкать дизайнерные пимпочки это тру :)
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819663
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЯ тоже слышал, что будет. Если будет, то зачёт. Ковыряться в гавноклассах тоскливо, щелкать дизайнерные пимпочки это тру :)

Просто я не совсем понимаю как это будет работать. С edmx понятно, там весь мусорный мета-хлам складывался, типа подвинул табличку, и её положение засейвилось. А как будет с классами хз. Похоже это делается чисто для отмазки толпам лентяев
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819709
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПросто я не совсем понимаю как это будет работать. С edmx понятно, там весь мусорный мета-хлам складывался, типа подвинул табличку, и её положение засейвилось. А как будет с классами хз.
Да точно так же. В студийном проекте куда-нибудь в свой конфиг вся эта шняга будет сливаться. Причем важно понимать, этот конфиг никуда в деплой не будет ходить, чисто конфигурационная какашка. Если её снести, то классы выстроятся по умолчанию. Сделать такую штуку не сложно.

hVosttПохоже это делается чисто для отмазки толпам лентяев
Ну каких лентяев? :) Нафига мне сидеть гавнокодить какие-то ассоциации, навигационные свойства, типы и прочий тихий ужас, если я эту задачу могу за пару кликов в дизайнере сделать. Тоже самое, попроси пользователей Visio поработать без дизайнера, а чисто с объектной моделью классов. Ага, пусть руками сущности описывают. Ну бред же
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819713
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНу каких лентяев? :) Нафига мне сидеть гавнокодить какие-то ассоциации, навигационные свойства, типы и прочий тихий ужас, если я эту задачу могу за пару кликов в дизайнере сделать. Тоже самое, попроси пользователей Visio поработать без дизайнера, а чисто с объектной моделью классов. Ага, пусть руками сущности описывают. Ну бред же

Дык тыж недавно только говорил, что у вас с моделью мудохается аналитик в EA, потом генерится база, затем из базы ты генеришь классы. Или уже что-то поменялось?
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819779
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДык тыж недавно только говорил, что у вас с моделью мудохается аналитик в EA, потом генерится база, затем из базы ты генеришь классы. Или уже что-то поменялось?
Ну не совсем так. Я типа вырисовывал идеальную картинку с максимально выжатым КПД из процесса. Во-вторых, я не говорил про генерацию базы из EA, это чушь. Я говорил о генерации новых таблиц из новых классов. То есть чисто разовый профит. И если говорить о текущей работе, у нас вообще нету EA. А был он вообще на пре-предыдущей работе. То есть ты взял сейчас, всё закинул в котёл, перемешал суп и повесил всех сусликов на меня. Не порядок же.
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819784
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и чего вы все накинулись на этот дизайнер? Ну не нравится в белом пиджачке сидеть, мышкой теребить сущности - ваше право. Сидите с унылым видом и ковыряйте ошмётки гавнокода. Чисто занятие для задротов. Но можно и так
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819805
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУДа и чего вы все накинулись на этот дизайнер? Ну не нравится в белом пиджачке сидеть, мышкой теребить сущности - ваше право. Сидите с унылым видом и ковыряйте ошмётки гавнокода. Чисто занятие для задротов. Но можно и так

А, т.е. у тебя слишком белые ручонки, чтобы кодить?
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38819833
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУДа и чего вы все накинулись на этот дизайнер? Ну не нравится в белом пиджачке сидеть, мышкой теребить сущности - ваше право. Сидите с унылым видом и ковыряйте ошмётки гавнокода. Чисто занятие для задротов. Но можно и так

А, т.е. у тебя слишком белые ручонки, чтобы кодить?
Мартышки иногда тоже хотят, чтобы их покатали в 750 Li

Мне вот что не понятно, накойхер (с) наш соапщик костыли пилит, когда уже есть готовый лисапед от вендора? :)
...
Рейтинг: 0 / 0
c# EF4 запрос по имени таблицы
    #38820558
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУhVosttПохоже это делается чисто для отмазки толпам лентяев
Ну каких лентяев? :) Нафига мне сидеть гавнокодить какие-то ассоциации, навигационные свойства, типы и прочий тихий ужас, если я эту задачу могу за пару кликов в дизайнере сделать.Накой мне создавать "тихий ужас" дизанером, если я могу нажать Run Custom Tool, и всё произойдёт само. Дельфийские корни напоминают о себе?

hVosttМСУТак пох на edmx, пусть делают дизайнер, вот что важно! )

Дизайнер вроде как обещают... Работать будет напрямую с классами, и мне не в домёк нафиг он нужен. Class Diagramm и без того есть, правда к EF он не имеет никакого отношения.

МСУМне вот что не понятно, накойхер (с) наш соапщик костыли пилит, когда уже есть готовый лисапед от вендора? :)Я не собираюсь ждать годами, когда ведро вендор соблаговолит отладить весь процесс разработки. За ~7 лет упорного труда наконец-то разработали DbContext API, который ничё так, и на том спасибо. Большего от них давно не жду.
...
Рейтинг: 0 / 0
25 сообщений из 223, страница 1 из 9
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# EF4 запрос по имени таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]