我想創建一個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中我必須爲一對多或類似的東西添加一些代碼,但我不知道該怎麼做。
請任何幫助!
[EF 4 Code First:由於模型中未包含EdmMetadata類型,無法檢查模型兼容性](http://stackoverflow.com/questions/8630755/ef-4-code-first-model -compatibility-不能待檢測-因爲最edmmetadata-T)。特別是對接受答案的評論。 – 2013-03-24 11:34:34
我在想這不是我的問題。我發現與數據庫存在混淆,因爲我從用戶到更多類別,更多產品的類別和更多產品的用戶,這是一個循環,我不能以另一種方式做。所以我只是刪除了關係循環和它的工作。如何做到這一點,爲我需要的關係工作? – 2013-03-24 12:53:32
我發現的好答案是:http://stackoverflow.com/questions/7367339/net-mvc-cyclical-reference-issue-with-entity – 2013-03-24 15:59:05