【发布时间】:2015-06-29 22:51:56
【问题描述】:
我正在尝试让 Codedom 生成以下代码:
public class NewContext : DbContext
{
public NewContext()
: base("NewContext")
{
EntityToRegisterDictionary = new ConcurrentDictionary<string, Assembly>();
}
static NewContext()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFEntityModelContext>());
}
}
我可以生成
public class NewContext : DbContext
没有任何问题。我在编写创建两个构造函数的代码时遇到了问题。我创建了两个方法,每个构造函数一个方法。这就是我的方法的样子:
public static CodeConstructor BaseStringConstructor(string connectionStr)
{
CodeConstructor baseStringConstructor = new CodeConstructor();
baseStringConstructor.Attributes = MemberAttributes.Public;
baseStringConstructor.BaseConstructorArgs.Add(new CodeVariableReferenceExpression("\"connectionStr\""));
CodeAssignStatement body = new CodeAssignStatement();
body.Left = new CodeFieldReferenceExpression(new CodeFieldReferenceExpression(), "EntityToRegisterDictionary");
body.Right = new CodeObjectCreateExpression("ConcurrentDictionary<string, Assembly>");
baseStringConstructor.Statements.Add(body);
return baseStringConstructor;
}
public static CodeConstructor StaticInitializerConstructor()
{
CodeConstructor constructor = new CodeConstructor();
constructor.Attributes = MemberAttributes.Static;
CodeObjectCreateExpression body = new CodeObjectCreateExpression("Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFEntityModelContext>");
constructor.Statements.Add(body);
return constructor;
}
然而,这段代码并不能产生我想要的上面的代码。我明白了:
public NewContext() :
base("connectionStr")
{
.EntityToRegisterDictionary = new ConcurrentDictionary<string, Assembly>();
}
NewContext()
{
new Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFEntityModelContext>();
}
“public NewContext()”构造函数中的问题是有一个'.'之前
EntityToRegisterDictionary
我认为这是因为这条线
body.Left = new CodeFieldReferenceExpression(new CodeFieldReferenceExpression(), "EntityToRegisterDictionary");
有没有人知道怎么做没有句号?
“静态NewContext()”构造函数存在三个问题:
Codedom 在 NewContext() 之前不写静态
它在数据库之前写入新的。
我不能在末尾的 () 之后添加右括号,因为 () 会在我写的任何内容之后自动添加。
有人知道怎么写吗
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFEntityModelContext>());
没有 new 关键字和添加右括号?
编辑:顺便说一下,EntityToRegisterDictionary 是我在下面定义的:
public IDictionary<string, Assembly> EntityToRegisterDictionary { get; private set; }
我只是没有包含所有这些上下文类。
【问题讨论】:
标签: c# constructor codedom