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