首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ef6 include()用于具有所需属性的可空属性

ef6 include()用于具有所需属性的可空属性
EN

Stack Overflow用户
提问于 2013-10-31 15:49:48
回答 1查看 938关注 0票数 2

我们刚刚更新到EF6,与上一个版本相比,我们遇到了一个奇怪的行为问题。

如果属性是可空的,则用于为Include语句生成左联接。但是,这个版本似乎也考虑到了所需的属性。

例如,我有以下课程:

代码语言:javascript
复制
public class Client
{    
    [DisplayName("Industry Code")]
    [Required]
    public int? IndustryId { get; set; }

    [ForeignKey("IndustryId")]
    public Industry IndustryEntity { get; set; }
}

当我们这样做

代码语言:javascript
复制
return db.Clients
    .Include(o => o.CountryISOEntity)
        .... 
    .Include(o => o.IndustryEntity)
    .Single(o => o.Id == clientId);

上一个版本生成左外部联接,但新版本生成内部连接。

如果我移除所需的属性,它就会生成左联接。但是在我的例子中,它不是一个选项,因为我们使用这个属性向用户显示错误,但是用户可以选择保存不完整的实体,然后返回到它。当用户返回时,会得到记录不存在的错误,因为include生成内部联接。

新EF6中是否存在禁用此行为(忽略属性)并根据可空信息生成sql查询的设置?或者我可以在包含中强制左加入吗?还是我们回滚到以前的EF版本的唯一选择?

PS:我们正在使用.Net 4.0

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-31 16:22:17

我假设您希望在MVC中使用Required属性进行表单验证,而不是告诉Entity该属性是必需的。这就是您需要视图模型的原因,因此您可以将视图的验证逻辑与实体框架验证逻辑分离开来。

视图模型表示视图,并包含呈现视图所需的所有数据。域模型(实体)表示数据库中的一个(或多个)表。视图模型不一定包含与域模型相同的属性。在我个人的经验中,它们通常是不同领域模型的组合。

如果为Client创建视图模型,则可以从EF中删除验证属性。

视图模型如下所示:

代码语言:javascript
复制
public class ClientModel
{
    [DisplayName("Industry Code")]
    [Required]
    public int IndustryId { get; set; }

    // Other properties..
}

那么你的POCO看起来就像这样:

代码语言:javascript
复制
public class Client
{
    public int? IndustryId { get; set; }

    [ForeignKey("IndustryId")]
    public Industry IndustryEntity { get; set; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19711079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档