我在ASP MVC和C#中理解复杂数据类型与实体的问题。我首先创建了以下类型,它不是一个实体(数据库表):
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 :(得分:2)
很难说在不知道所做的所有更改的情况下究竟发生了什么,但您可以通过使用Period
属性标记{或{1}}来明确告诉EF ComplexType
是复杂类型流畅的映射:
modelBuilder.ComplexType<Period>();