名称空间中不存在类型或命名空间名称“entityName”。 CodeDOM和EF麻烦

时间:2015-07-27 15:34:52

标签: c# entity-framework generics reflection codedom

我正在使用Entity Framework。我使用CodeDOM动态生成我的实体和上下文(每个实体类型都有一个上下文,直到我进入复杂的实体关系)。为了确保我生成的实体是其相应上下文的模型的一部分,我使用反射来获取实体的类型,并将其写入生成上下文的代码中。为了更具体地看到这一点,我在我的类中使用了这个方法来生成上下文:

public static CodeMemberProperty HardCodeDbSet(string contextName, Type entityType)
{
    string entityName = entityType.ToString();
    CodeMemberProperty prop = new CodeMemberProperty();
    prop.Attributes = MemberAttributes.Public | MemberAttributes.Final;
    prop.Name = entityName + "s";
    prop.Type = new CodeTypeReference(typeof(DbSet<>).MakeGenericType(entityType));
    return prop;
}

此方法在生成的上下文类中生成以下行:

public System.Data.Entity.DbSet<Models.GeneratedEntities.Soap> Soaps
{
}

它说肥皂和肥皂,因为在我的测试程序中我制作了实体名称Soap(只是随机的东西)。但总的来说,它将是我给它的任何实体名称。

但是,当我尝试生成要使用的此类的实例时,我收到以下错误:

  

“c:\ Users \ MyUserAccount \ Documents \ ContextTest \ bin \ Debug \ EFEntityTest_v1.cs(29,94):error CS0234:名称空间'Models.GeneratedEntities'中不存在类型或命名空间名称'Soap' (你错过了一个程序集引用吗?)\ n“

第29行,第94列正是Soap在GeneratedEntities之后的行中开始的地方。:

public System.Data.Entity.DbSet<Models.GeneratedEntities.Soap> Soaps
{
}

很明显,这条线无法正常工作:

prop.Type = new CodeTypeReference(typeof(DbSet<>).MakeGenericType(entityType));

我知道这与我在使用CodeDOM动态生成的东西上调用MakeGenericType这一事实有关,但我觉得它应该有效。有没有人知道发生了什么?此外,我还为Models.GeneratedEntities所在的项目传入了引用程序集。

0 个答案:

没有答案