CodeOnly增强.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CodeOnly增强

Code Only增强 本贴的余下部分将依次对这些特性进行详述。 注册导航属性的倒转关系: 你现在可以注册倒转关系,即一个导航属性到另一个导航属性的倒转(inverse)关系,象这样: builder.RegisterInverse( (Customer c) = c.Orders, (Order o) = o.Customer) ); 这代码表示Customer.Orders是Order.Customer关系的另一头。把order1 加到customer1.Orders集合中去,与把order1.Customer设置成customer1具有同等的效果。 指定属性细节(Facets): 你还可以指定属性的细节,即象Nullability(可null性), MaxLength(最大长度), Precision(精度)等等这样的东西,象这样: var customerConfig = new EntityConfigurationCustomer(); // 我们可以推断出ID是主键 // 但无法推断出它在插入时是在数据库生成的 customerConfig.ForProperty(c = c.ID) .Identity(); customerConfig.ForProperty(c = c.Name) .MaxLength(100) .NonUnicode(); customerConfig.ForProperty(c = c.Website) .MaxLength(200) .Nullable() builder.Configure(customerConfig); 这把Customer类型配置成: ID 属性是Identity字段,即在我们插入数据到数据库时,其值是由数据库计算出来的。 Name属性,其MaxLength为100个字符,是NonUnicode(非Unicode),即在SQL Server中是VARCHAR而不是NVARCHAR。 Website属性,其MaxLength为200个字符串,是Nullable。 这些细节是针对概念模型Conceptual Model,即CSDL)的,从那里,也传到数据库(即SSDL)。 封装细节配置 你可以创建一个EntityConfigurationT的继承类来封装所有这些配置。 例如: public class CustomerConfig: EntityConfigurationCustomer { public CustomerConfig(){ ForProperty(c = c.ID) .Identity(); ForProperty(c = c.Name) .MaxLength(100) .NonUnicode(); ForProperty(c = c.Website) .MaxLenght(200) .Nullable(); } } 我们建议你创建象这样的类,而不是配置EntityConfiguration,因为封装的好处。 指定数据表名 在你使用ConfigureT(..) 时,实体框架为你推断出默认的映射,继承策略(TPH)和表名。 但如果你要指定表名,你可以这么做: var customerConfig = new EntityConfigurationCustomer(); // 象上面那样配置细节 … // 用一个特定的表名注册配置 builder.Tables[“dbo.Custs”] = customerConfig; 指定映射: 如果你需要对映射更多的控制(例如,要映射到一个现有的数据库或者使用企业的命名规则),那么你可以象这样指定映射: EntityMapCustomer customerMap = Map.OfTypeCustomer( c = new { cid = c.ID, c.Name, csite = c.Website } ); 映射解释 这个映射表明,ID是映射到‘cid’字段,Name属性是保存到‘Name’字段,而Website是映射到‘csite’ 字段的。 没有被引用的属性是不会被持久化的,就象使用实体框架默认的代码生成时生成的部分类上的属性一样。 LINQ内涵句法(Comprehension Syntax) 你甚至也可以使用LINQ内涵句法来指定同样的事情: EntityMapCustomer customerMap = from c in Map.OfTypeCustomer() select new { cid = c.ID, c.Name, csite = c.Website }; 用映射指定细节(Facets)

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档