Как получить атрибут [Key] в коде c #, сгенерированном codeDOM - PullRequest
0 голосов
/ 17 января 2019

Я пишу код для создания файла класса для моей таблицы времени выполнения, который будет включен в миграцию среды Entity.

В файле класса хотите узнать, как назначить CodeMemberFields в качестве первичного ключа или IDENTITY и т. Д.,

У меня есть этот код:

    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");

Выход:

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] выше RefNo. Как мне это сделать ?

...