Как получить атрибут [key] в сгенерированном коде codedom
Привет,
У меня есть этот код для генерации класса.
namespace EFCodeFirstTest { class GenClass { CodeCompileUnit CompileUnit; CodeTypeDeclaration NewClass; public GenClass(String Classname) { CompileUnit = new CodeCompileUnit(); CodeNamespace ns = new CodeNamespace("EFCodeFirstTest"); ns.Imports.Add(new CodeNamespaceImport("System")); ns.Imports.Add(new CodeNamespaceImport("System.Collections.Generic")); ns.Imports.Add(new CodeNamespaceImport("System.ComponentModel.DataAnnotations")); ns.Imports.Add(new CodeNamespaceImport("System.ComponentModel.DataAnnotations.Schema")); ns.Imports.Add(new CodeNamespaceImport("System.Data.Entity.Spatial")); NewClass = new CodeTypeDeclaration(Classname); NewClass.IsClass = true; NewClass.TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed; ns.Types.Add(NewClass); CompileUnit.Namespaces.Add(ns); } public void AddColumns() { CodeMemberField mfield0 = new CodeMemberField(typeof(Int32), "RefNo"); mfield0.Attributes = MemberAttributes.Public; mfield0.Type = new CodeTypeReference(typeof(Int32)); NewClass.Members.Add(mfield0); } public void CreateCS(String mfilename) { CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); CodeGeneratorOptions options = new CodeGeneratorOptions(); options.BracingStyle = "C"; options.BlankLinesBetweenMembers = false; using (StreamWriter sw = new StreamWriter(mfilename)) { provider.GenerateCodeFromCompileUnit(CompileUnit, sw, options); } } } }
Я называю это так :
GenClass objGenClass = new GenClass("Folio2"); objGenClass.AddColumns(); objGenClass.CreateCS(@"../../Models/Folio2.cs");
Он сгенерировал этот код :
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ namespace EFCodeFirstTest { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.Spatial; public sealed class Folio2 { public int RefNo; } }
Как я могу добавить атрибут [Key] над полем, а также как обозначить поле как IDENTITY ?
Я ищу этот выход :
[Key] public int Refno {get; set;}
Пожалуйста, предложите. Заранее спасибо.
Что я уже пробовал:
Попробовал сделать это как в эта ссылка но это не работает для атрибута первичного ключа.
Попробовал добавить атрибут KeyAttribute через CustomAttributes.Add. Но это не сработало.
также пробовать :
CodeAttributeDeclaration mattr = new CodeAttributeDeclaration("Key"); CodeMemberField mfield0 = new CodeMemberField(typeof(Int32), "RefNo"); mfield0.CustomAttributes.Add(mattr);
Это привело к тому, что :
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ namespace EFCodeFirstTest { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.Spatial; public sealed class Folio2 { [Key()] public int RefNo; } }
Maciej Los
Насколько я помню, если вы замените RefNo
с ID
, EF будет рассматривать это поле как [ключ].
Priya-Kiko
Спасибо Вам за ответ. Попробовал изменить имя столбца на ID, но безуспешно !!