当Entity Framework位于单独的库中时,模型上的部分类

时间:2013-08-30 15:45:08

标签: asp.net-mvc entity-framework partial-classes

我不确定这是否正确,如果是这样,请另行通知。

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

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

然后在开发网站时添加/引用该项目。

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

现在 - 在网站项目中,我想创建一个我的EF模型的部分类,例如“Users”,其中包含一个不在数据库中的附加属性。

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

我似乎无法在这个MV处于单独项目的MVC项目中使用它。

我试过这样做:

 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”

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

我说的是胡说八道吗?

2 个答案:

答案 0 :(得分:6)

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

Is it possible to have two partial classes in different assemblies represent the same class?

答案 1 :(得分:3)

如果您希望使用用于显示目的的其他属性来扩充模型,则应考虑使用视图模型,以及用于将数据映射到模型和从模型映射数据以查看模型的机制。

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