我有一个由VS ORD生成的Linq模型,但我希望对它进行更改,以解决以下几个问题。我可以更改designer.cs生成的代码,但如果需要在模型中重新创建表,则删除它并将其拖回ORD。然而,这将失去我所有的定制。还有别的办法吗?
我已经看到了对sqlMetal.exe的引用,但不确定我将如何使用它来绕过这个问题。
关于信息,我的自定义如下:
Guid,并希望db默认这些值,因此我希望更改默认的linqtosl行为以将属性[Column(IsDbGenerated= true)]添加到ID属性中。EntitySet<T>)。为了解决这个问题,我需要稍微更改这些集合的setter。这两个变化都不是特别大,但随着时间的推移,我的数据库可能会发生很大的变化,我需要记住每次都要进行定制。
发布于 2009-06-09 19:23:54
我有同样的问题,并希望看到一个答案出现在这里,解决了你提到的这两个问题。(我在第2项中找到了另一个解决办法,尽管在部分中使用OnCreated()的想法似乎比我目前正在做的更好。)
我最近确实遇到了一篇文章(我将链接到下面),这可能是实现这些目标的一个适用的解决方案。本文描述了作者(1)如何使用SQLMetal生成dbml文件,(2)运行一个自定义进程来分析和修改这个dbml文件以满足他的需要,然后(3)再次使用SQLMetal,这次是在修改后的dbml文件中输入,以生成代码。对于小型项目/模式来说,这可能是一项很大的工作,但我可以看到,对于大型项目来说,这是一种方便的解决办法。
下面是链接:http://www.onedotnetway.com/enum-support-with-linq-to-sql-and-sqlmetal/
祝你好运!-Mike
发布于 2009-06-03 10:43:12
我是“部分”类是关于什么的?。L2SQL将实体类创建为“部分”,因此您不必编辑设计器生成的代码,即使您重新创建了yur实体模型。
发布于 2009-06-09 19:47:33
我以前已经遍历过这个路径,唯一可靠的方法是远离sqlmetal.exe / dbml路径,并参与T4的自定义类生成器(如LINQ模板)。
http://l2st4.codeplex.com/
您需要使用这样的东西是因为您需要让您的类生成器从不同的来源提取您的自定义更改信息。最后,我将自定义放入Dbml传统上使用的生成的XML中。然后,我修改了t4模板,将所需的自定义类公之于众。
警告:这最终是一个彻底的噩梦来实现,并被抛弃为一个记事本文件的自定义更改。我们只需要在需要的时候把它们烧掉。海事组织,这是Linq2SQL最薄弱的环节之一,也是我为未来项目探索其他项目的一个重要原因。
https://stackoverflow.com/questions/943996
复制相似问题