模型/实体与复杂类型

问题描述:

我有一个理解复杂的数据类型与ASP MVC和C#实体的问题。我开始通过创建以下类型,这并不意味着是一个实体(DB表):模型/实体与复杂类型

public class Period : IPeriod 
{ 
    public DateTime From { get; set; } 
    public DateTime To { get; set; } 
} 

我添加了这个类型的模型:

public class Event 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public Period EventTime { get; set; } 
} 

这工作得很好。它似乎明白Period是一个复杂的类型,但不是一个实体。它只是将EventTime_From和EventTime_To列添加到Event表中。

然而,我通过删除接口,将类移动到不同的名称空间并向类中添加方法,给Period类型增加了一些复杂性。突然间,当试图重建数据库时,它突然被解释为一个实体类型,因此抛出了一个缺少主键的异常。

这是什么系统?何时将类视为复杂类型,以及何时将它们视为实体?

+0

不是修改Period,而是尝试在实现中创建Period的子类,或者让Period成为部分类并将实现放在另一个部分的某处? – qJake 2013-05-08 20:02:03

+0

虽然我有类似问题的一些经验,但我并不熟悉Entity模型生成器幕后发生的事情。这些模型具有资源文件,它们将对象定义为表映射。自动化模型生成器做出了一个不正确的推理(它试图将Period映射到某个表或者创建一个,如果它不存在的话),您必须手动修正其中一个资源文件。 – evanmcdonnal 2013-05-08 20:02:05

这是很难说究竟是怎么回事不知道你所做的所有的变化,但你总能EF明确表示Period是一个复合型的或者与ComplexType属性标记,或通过使用流利的映射:

modelBuilder.ComplexType<Period>(); 
+0

啊。大。正是我需要的。谢谢。 – 2013-05-08 21:08:45