Entity Framework EDMX - 实体复数修正

4

我们使用PluralizationService发现了某些单词的错误,例如它认为"Campus"是复数形式,并将其变成"Campu"的单数形式。

无论如何,我们已经找到了如何使用ICustomPluralizationMapping接口向服务添加自定义映射的方法,问题是,如何告诉EntityModelCodeGenerator使用我们的自定义服务而不是基本服务?

我们正在使用EF 4.2数据库与自定义T4模板。


1
实际上,您正在使用数据库优先。否则,您将会询问如何让EF将实体“Campus”复数化为表“Campuses”(模型优先)。另外,如果您的表名已经是单数形式,为什么不完全禁用复数/单数形式呢? - Danny Varod
可能是以下问题的重复:在EDM Designer 2010中是否有设置自定义多元化的方法? - Ladislav Mrnka
Danny,是的,你说得对,实际上是数据库优先。如果我们禁用复数形式,则在对象上下文中不会得到实体的复数形式。 - EkoostikMartin
Ladislav,严格来说这是一个重复问题,但那个问题的被接受答案并不有用。链接的示例是任意的,我无法弄清楚在我的情况下应该把自定义EntityModelSchemaGenerator代码放在哪里。 - EkoostikMartin
1个回答

1

也许这篇文章会有所帮助:http://blogs.msdn.com/b/efdesign/archive/2008/12/02/pluralization.aspx

更新1: 您需要添加以下代码(示例):

//Create an EDM from SSDL generator
EntityModelSchemaGenerator generator =
    new EntityModelSchemaGenerator(
        storageModel,  
        "MyNamespace",
        "MyContainer", 
        pluralizationService);

//Generate CSDL and MSL (in memory)
generator.GenerateMetadata();

关于T4模板的使用。为了实现这一点,您需要将模板添加到您的项目中:在模型设计器中的空白处右键单击并选择“添加代码生成项”。然后选择所需的模板,您就可以自定义此模板。

参考资料:http://onlinecoder.blogspot.de/2011/03/customize-entity-framework-code.htmlhttp://www.matthidinger.com/archive/2010/02/09/customizing-the-entity-framework-t4-template-suppressing-code-analysis.aspx

更新2:文本转换和查找实体复数(集合)


是的,我看过这篇文章,它很有帮助,但问题是,我应该在哪里调用EntityModelSchemaGenerator? - EkoostikMartin
但这不会改变我们在实体设计器中看到的实体名称,对吧?据我所知,在数据库优先模式下,使用 T4 模板来生成最终的 POCO 类。 - Ivan Ferrer Villa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接