MVC3アプリを作ろうと思っているのですが、まずDBを作るEFコードで困っています。私はこのテーブルを持っています:ユーザー、カテゴリ、製品、ローン。ユーザーはカテゴリを作成できません。ユーザーは製品を追加できません。ユーザーはローンを追加できません。カテゴリには、1 つ以上の製品を含めることができます。カテゴリはユーザーに属します。Product は、0 またはそれ以上の Loans を持つことができます。製品はユーザーに属します。製品はカテゴリにあります。ローンはユーザーに属します。ローンが製品に追加されます。
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public virtual ICollection<Category> Categorys { get; set; }
public virtual ICollection<Product> Products { get; set; }
public virtual ICollection<Loan> Loans { get; set; }
}
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public int UserID { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public int UserID { get; set; }
public int CategoryID { get; set; }
public virtual User User { get; set; }
public virtual Category Category { get; set; }
public virtual ICollection<Loan> Loans { get; set; }
}
public class Loan
{
public int LoanID { get; set; }
public bool LoanStatus { get; set; }
public int UserID { get; set; }
public int ProductID { get; set; }
public virtual User User { get; set; }
public virtual Product Product { get; set; }
}
コンテキストを作成しました:
public class BuisnessContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Category> Categorys { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<Loan> Loans { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
connectionString を追加しました。
<add name="BuisnessContext"
connectionString="Data Source=|DataDirectory|Buisness.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
また、単純な Initializer クラスを作成しました。
public class BuisnessInitializer : DropCreateDatabaseIfModelChanges<BuisnessContext>
{
protected override void Seed(BuisnessContext context)
{
var users = new List<User>
{
new User { UserName = "u1"},
new User { UserName = "u2"} };
users.ForEach(s => context.Users.Add(s));
context.SaveChanges();
var categories = new List<Category>
{
new Category { CategoryName = "N1", UserID=1 } };
categories.ForEach(s => context.Categorys.Add(s));
context.SaveChanges();
var products = new List<Product>
{
new Product { ProductName = "N1", UserID = 1, CategoryID = 1 }
};
products.ForEach(s => context.Products.Add(s));
context.SaveChanges();
var loans = new List<Loan>
{
new Loan { LoanStatus = true, UserID = 2, ProductID = 1 }
};
loans.ForEach(s => context.Loans.Add(s));
context.SaveChanges();
}
}
また、ユーザーを取得するためにユーザー用のコントローラーを生成しましたが、ユーザーを取得しようとすると、次のようなエラーが発生しました。
EdmMetadata 型がモデルに含まれていないため、モデルの互換性を確認できません。IncludeMetadataConvention が DbModelBuilder 規則に追加されていることを確認してください。
ウィズを変えてDatabase.SetInitializer<BuisnessContext>(new BuisnessInitializer());
みたDatabase.SetInitializer<BuisnessContext>(null);
次に、テーブル ユーザーが存在しないというエラーが表示され、APP_DATA フォルダーにテーブルが見つかりませんでした -> Buisness.mdf データベースは作成されましたが、テーブルがありました。
私のBuisnessContextに、1対多またはこのようなコードを配置する必要があることは理解していますが、その方法がわかりません。
助けてください!