2

我不确定这是否是正确的方法,如果是,请另外提出建议。

这是一个使用 EF 5.x 的 ASP.Net MVC 4 站点

假设您有自己的类库中的实体框架。代码生成项现在已生成所有模型(EF 模式的 xxx.tt 部分)

然后在站点开发中添加/引用该项目。

您现在可以通过 EF 访问数据。

现在 - 在站点项目中,我想创建一个我的 EF 模型的部分类,例如“用户”,并带有一个不在数据库中的附加属性。

在过去的 Web 表单项目中,当 EF 是项目的一部分而不是参考时,我会简单地创建部分类,一切都会好起来的;我的“用户”现在会有一堆其他的东西,这些东西与数据库无关,但“用户”需要。

我似乎无法让它在这个 MVC 项目中工作,其中 EF 在一个单独的项目中。

例如,我尝试过这样做:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MyTestEntity.Entity;

namespace MyTestMVCSite.Models
{
    public partial class Email
    {       
        public string OtherEmail {
            get { return "me@myEmail.com"; }
        }       
    }
}

我也尝试过继承 EF 模型类,如下所示:

public partial class Email : MyTestEntity.Entity.Email
{       
    public string OtherEmail {
        get { return "me@myEmail.com"; }
    }       
}

我似乎没有做任何事情让我可以访问“OtherEmail”

我真正想做的是为我的一些模型创建一个局部类,然后让这个局部类实现一个接口,这样我就可以将该接口的一个实例注入另一个对象而不是重载。

我是在胡说八道吗?

4

2 回答 2

7

在两个不同的程序集(项目)中,不能有两个部分类引用同一个类。一旦程序集被编译,元数据就会被烘焙,你的类不再是部分的。部分类允许您将同一类的定义拆分为两个文件。

是否可以让不同程序集中的两个部分类代表同一个类?

于 2013-08-30T15:49:30.763 回答
3

如果您希望使用用于显示目的的附加属性来扩充您的模型,那么您应该考虑使用视图模型,以及一种将数据映射到模型以及从模型映射到视图模型的机制。

然后,您可以根据当前视图独立于模型执行验证。视图模型还将保护您避免意外暴露您不希望用户通过发布数据更改的模型上的属性,即使您没有在视图中明确指定它们。

于 2013-08-30T15:50:03.857 回答