我最近开始使用EF6,并且我正在构建一些T4模板以自动生成一些代码(在VS2012上)。
我从数据库生成我的模型,此过程基于DB ForeignKeys自动创建所有关联。并生成太多的导航属性"在Associations / FK中的那个字段。
我希望得到一个" Flat版本"我的实体没有导航属性。只是一个具有与表列对应的属性的类。
有没有办法从数据库生成模型"得到这个?我尝试使用选项"在模型中包含外键列来更新模型"未经检查,但关联和导航道具仍在生成。
提前致谢
答案 0 :(得分:1)
您必须编辑构建模型类的t4模板才能完成此任务。
在您的项目中,您会找到两个.tt文件,例如ModelName.Context.tt
和ModelName.tt
。后者是构建模型类的那个。
寻找这两行
this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();
(可能在第50行附近)
和
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
(可能在第100行附近)
并删除这些行。
现在,当您保存模板时,将重新生成您的类,而不会导航属性。
答案 1 :(得分:0)
解决方案
当我阅读概念模型时,我得到了关于表结构的未知信息,因为edmx上的概念模型,因为当我们有外键时,会创建关联并使用Nav props而不是常规属性(在字段上)与FK合作。)
我找到的解决方案是使用商店模型而不是概念模型
获取概念模型“错误的方式”
MetadataLoader loader = new MetadataLoader(this);
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
获取商店模式“GOOD way”
MetadataLoader loader = new MetadataLoader(this);
StoreItemCollection ItemCollection = null;
loader.TryCreateStoreItemCollection(inputFile, out ItemCollection);