如果有人可以对此有所了解,请提供一些帮助。
我创建了一个运行良好的代码优先 MVC 3 应用程序。我现在正在重构以尽可能多地移除耦合,因为我希望域模型稍后在各种其他 MVC 3 应用程序中使用。我现在拥有的是通过规范化数据库持久化的实体集合,它们通过存储库模式进行 CRUD 编辑。我已经使用 Ninject 通过控制器的构造函数来 DI 存储库,并使用 MVC 3 项目中的模型充当 DAO。
因此,在域中,我有一个名为Case的实体,它具有另一个案例Client的外键,如下所示:
public class Case : ICase
{
[Key]
public int CaseId { get; set; }
public string CaseName { get; set; }
public DateTime DateCreated { get; set; }
public IClient Client { get; set; }
}
然后我有一个接口(该接口的存在主要是为了将它实现到视图模型以添加我的数据注释 - 我知道我可以将注释添加到域对象但正如我所说我想在其他应用程序中使用这个域模型,这将有不同的无处不在的语言。
public interface ICase
{
int CaseId { get; set; }
string CaseName { get; set; }
DateTime DateCreated { get; set; }
IClient Client { get; set; }
}
然后我在 MVC 3 项目中有我的视图模型。
public class CaseModel : ICase
{
[HiddenInput(DisplayValue = false)]
int CaseId { get; set; }
[Required(AllowEmptyStrings = false)]
[MaxLength(100)]
string CaseName { get; set; }
[RegularExpression("")]
DateTime DateCreated { get; set; }
IClient Client { get; set; }
}
所以,我的第一个问题是:将我对Client的外键引用更改为IClient是一个新事物,它返回一个空对象。当类型是具体类时,它返回正常 - 我认为这是因为 EF4.1 尝试创建IClient的实例。我在这里完全错了还是有办法解决这个问题?
我的第二个问题(这可能会否定我的第一个问题)是通过将数据注释添加到继承域实体接口的视图模型中,我是否也做错了什么?我应该使用模型元数据吗?如果是这样,我如何使用元数据以使每个项目的数据注释都是唯一的,而无需触及域?
谢谢!