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 に答える