2013-03-24 90 views
0

我想創建一個MVC3應用程序,我首先用EF代碼來創建數據庫。 我有這個表:用戶,類別,產品,貸款。 用戶可以創建一個或多個類別。 用戶可以添加一個或多個產品。 用戶可以添加一個或多個貸款。 類別可以有一個或多個產品。 類別屬於用戶。 產品可以沒有或多個貸款。 產品屬於用戶。 產品屬於類別。 貸款屬於用戶。 貸款被添加到產品。代碼第一個數據庫模型

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; } 
} 

有無maded背景:

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"/> 

另外一個已經maded一個簡單的初始化器類:

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(); 
    } 
} 

我也有爲用戶t生成一個控制器o獲取用戶,但是當我嘗試獲取用戶時,我收到如下錯誤:

由於EdmMetadata類型未包含在模型中,因此無法檢查模型兼容性。確保IncludeMetadataConvention已被添加到DbModelBuilder約定中。

我試圖改變Database.SetInitializer<BuisnessContext>(new BuisnessInitializer()); 蒙山Database.SetInitializer<BuisnessContext>(null);

然後我geted該表用戶doesen't存在,我沒有發現任何表在我APP_DATA文件夾中的錯誤 - > Buisness.mdf 的數據庫已創建,但有任何表。

我知道在我的BuisnessContext中我必須爲一對多或類似的東西添加一些代碼,但我不知道該怎麼做。

請任何幫助!

+0

[EF 4 Code First:由於模型中未包含EdmMetadata類型,無法檢查模型兼容性](http://stackoverflow.com/questions/8630755/ef-4-code-first-model -compatibility-不能待檢測-因爲最edmmetadata-T)。特別是對接受答案的評論。 – 2013-03-24 11:34:34

+0

我在想這不是我的問題。我發現與數據庫存在混淆,因爲我從用戶到更多類別,更多產品的類別和更多產品的用戶,這是一個循環,我不能以另一種方式做。所以我只是刪除了關係循環和它的工作。如何做到這一點,爲我需要的關係工作? – 2013-03-24 12:53:32

+0

我發現的好答案是:http://stackoverflow.com/questions/7367339/net-mvc-cyclical-reference-issue-with-entity – 2013-03-24 15:59:05

回答

0

我發現在.net mvc cyclical reference issue with entity

我的問題的答案所以對我的回答是這樣的:

modelBuilder.Entity<Product>() 
      .HasRequired(p => p.User).WithMany(p => p.Products).HasForeignKey(p => p.UserID).WillCascadeOnDelete(false); 
     modelBuilder.Entity<Product>() 
      .HasRequired(p => p.Category).WithMany(p => p.Products).HasForeignKey(p => p.CategoryID).WillCascadeOnDelete(false); 
     modelBuilder.Entity<Loan>() 
      .HasRequired(l => l.Product).WithMany(l => l.Loans).HasForeignKey(l => l.ProductID).WillCascadeOnDelete(false); 

的原因是,我在這裏做像相同的表有些不同路徑用戶 - 類別,用戶 - 類別 - 產品,類別 - 產品,用戶 - 產品 - 貸款。

也許這對其他人來說是一個很好的答案。

相關問題