C# 模型/实体与复杂类型

C# 模型/实体与复杂类型,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我在理解ASP MVC和C#中复杂的数据类型与实体时遇到问题。我首先创建了以下类型,它不是实体(DB表): 我将此类型添加到模型中: public class Event { public int ID { get; set; } public string Title { get; set; } public Period EventTime { get; set; } } 这很有效。它似乎理解了周期是一个复杂的类型,但不是一个实体。它只是将EventTime\u F

我在理解ASP MVC和C#中复杂的数据类型与实体时遇到问题。我首先创建了以下类型,它不是实体(DB表):

我将此类型添加到模型中:

public class Event
{
    public int ID { get; set; }
    public string Title { get; set; }
    public Period EventTime { get; set; }
}
这很有效。它似乎理解了周期是一个复杂的类型,但不是一个实体。它只是将EventTime\u From和EventTime\u To列添加到事件表中

但是,随后我通过删除接口、将类移动到不同的名称空间并向类添加方法,为Period类型增加了一些复杂性。突然,当试图重建数据库时,它突然被解释为entitytype,从而引发缺少主键的异常


这里的系统是什么?什么时候类被视为复杂类型,什么时候它们被视为实体?

在不知道您所做的所有更改的情况下,很难说到底发生了什么,但您始终可以通过使用
ComplexType
属性标记它或使用fluent映射明确告诉EF
Period
是一种复杂类型:

modelBuilder.ComplexType<Period>();
modelBuilder.ComplexType();

您没有修改Period,而是尝试使用实现创建Period的子类,还是将Period设置为分部类,并将实现放在其他地方的另一个分部中?对于实体模型生成器的幕后操作,我当然不是专家,虽然我有一些类似问题的经验。这些模型有资源文件,它们在其中定义对象到表的映射。automated model generator做出了错误的推断(它试图将Period映射到某个表或创建一个表,如果它不存在),您必须在其中一个资源文件中手动更正该推断。啊。伟大的正是我需要的。非常感谢。
modelBuilder.ComplexType<Period>();