0

我是代码第一范式的新手,所以请多多包涵。我无法从我的实体类中获取在我的数据库上创建的基元或自定义类的集合/列表/数组。因此,我无法正确地为表播种。没有错误,只需获取一个包含除我的集合之外的所有属性的实体表。我正在使用 EF5、VS2010、MVC4 和 SqlExpress。我究竟做错了什么?

我的实体类:

public class MyEntity
{    
    public int MyEntityID { get; set; } // GOOD
    public string Property1 { get; set; }  // GOOD
    public bool Property2 { get; set; }  // GOOD
    public IList<CustomClass> CustomClassList { get; set; }  //BAD, NOT CREATED ON DB
    public CustomClass[] CustomClassArray { get; set; }  //BAD, NOT CREATED ON DB
}

我的自定义类:

[ComplexType]
public class CustomClass
{
    public string Title { get; set; }
}

我的配置/迁移类

public class Configuration : DbMigrationsConfiguration<MyContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(MyContext context)
    {
        context.MyEntity.AddOrUpdate(x => x.MyEntityID,
             new MyEntity()
             {
                 Property1 = "abc",
                 Property2 = "xyz",
                 CustomClassList = new List<CustomClass> {new CustomClass{Title="Help"}}
             }
        context.SaveChanges();       
    }
}

我的 Global.asax.cs Application_Start() 方法

protected void Application_Start()
{
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    AuthConfig.RegisterAuth();
    SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
}

当我尝试创建一个新数据库时,我得到了相同的结果:

<!--NO LUCK-->
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS2;Initial Catalog=TESTDB_2;Integrated Security=SSPI" providerName="System.Data.SqlClient" />   
<!--NO LUCK-->
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS2;Initial Catalog=TESTDB_3;Integrated Security=SSPI" providerName="System.Data.SqlClient" />  
4

1 回答 1

2

实体框架不支持原始或复杂类型的集合。如果您想要一个集合,它必须是实体的集合(即它们需要具有关键属性)。如果您有一个实体集合 - 在最简单的情况下 - 将被建模为一个单独的表,并且将根据需要创建适当的外键(取决于关系的基数)。在您的情况下, CustomClass 被忽略,因为它不是实体并且在集合中使用(也被忽略,因为它不是实体类型的集合)。CustomClassArray 被忽略,因为根本不支持数组,因为您无法在不重新分配数组的情况下添加/删除项目。

于 2013-03-08T16:27:41.353 回答