我正在考虑从LLBLGen ORM迁移到Entity Framework。我想使用自定义命名约定来映射数据库列名称。
我的表名都是单词之间带下划线的大写字母。即ACCOUNT_BALANCE
所有列名都是单词之间带下划线的大写字母:即FULL_NAME
我的主键都以PK_或PFK_为前缀:即PK_ACCOUNT_BALANCE
我的外键都以FK_为前缀:即FK_ACCOUNT
我有一个庞大的数据库要设置,所以我想使用数据库中的' Code First'使用自动映射器将ACCOUNT_BALANCE转换为AccountBalance,将FULL_NAME转换为FullName,将PK_ACCOUNT_BALANCE转换为PkAccountBalance等等。
我不介意弄脏手并进入EF资源,但我目前正在努力寻找有关最佳方法的指导。
非常感谢任何帮助。
解决方案
下面的minhcat_vo解决方案让我开始了。之后我右键点击了VS中的解决方案,点击了“实体框架” - >自定义逆向工程师模板'将自定义模板添加到项目中。然后我创建[Program Files] \ VisualStudio \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ Templates \ Includes \ EF.Utility.CS.ttinclude(在同一个文件夹中)的副本
然后在Context.tt,Entity.tt和Mapping.tt文件中,我用新的替换了include的引用(<#@ include file =" EF.Utility.CS-MMS.ttinclude& #34;#><#@)
之后,我浏览了Context.tt,Mapping.tt和Entity.tt文件,包含对code.ContextName(...),code.EntityName(...)和代码的上下文,实体和属性的引用。的PropertyName(...)
然后在新的EF.Utility.CS.ttinclude文件中添加了那些方法和一个PascalCase方法:
public string PascalCase(string name)
{
return name == null || name.Length == 0
? ""
: name.Length == 1
? name.ToUpperInvariant()
: String.Join("",
name.Split('_')
.Select(part => Char.ToUpperInvariant(part[0]) + part.Substring(1).ToLowerInvariant() )
);
}
public string ContextName(string name)
{
return PascalCase( name.Substring(0,name.Length - "Context".Length) ) + "Context";
}
public string EntityName(string name)
{
return PascalCase(name);
}
public string PropertyName(string name)
{
return PascalCase(name);
}
然后我右键点击了一个点击了“逆向工程师代码优先”的解决方案。生成类。
我有兴趣知道这是否是最佳方法。虽然看起来很稳固。
答案 0 :(得分:2)
我认为EF晚于EF 4.3版本,它有一个功能 DbMigration 来处理遗留系统,以便在开发人员之间更改数据库。也许它可以在某种程度上帮助你。
如果您已有现有数据库,则仍然首先使用代码。您可以下载Visual Studio的 EF Power Tool 扩展程序。它基本上生成您的实体模型,其关系是一个实体 - 一个表和所有地图文件。