2013-03-24 4 views
0

MVC3 응용 프로그램을 만들려고합니다. 먼저 DB를 만들 때 EF 코드로 문제가 있습니다. 나는이 테이블을 가지고있다 : User, Category, Product, Loan. 사용자가 하나 이상의 범주를 만들 수 있습니다. 사용자는 하나 이상의 제품을 추가 할 수 있습니다. 사용자는 하나 이상의 대출을 추가 할 수 있습니다. 범주에는 하나 이상의 제품이있을 수 있습니다. 범주는 사용자에게 속합니다. 제품에는 대출이 하나 이상있을 수 있습니다. 제품은 사용자에 속합니다. 제품은 범주에 있습니다. 대출은 사용자에게 속합니다. 대출이 제품에 추가되었습니다.코드 첫 번째 데이터베이스 모델

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 :

<add name="BuisnessContext" 
    connectionString="Data Source=|DataDirectory|Buisness.sdf" 
    providerName="System.Data.SqlServerCe.4.0"/> 
또한

A는 간단한 초기화 클래스 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(); 
    } 
} 

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을 추가했습니다 사용자 t에 대한 컨트롤러 생성 o 사용자를 얻으려고하지만 다음과 같은 오류 메시지가 나타납니다.

모델에 EdmMetadata 유형이 포함되어 있지 않으므로 모델 호환성을 확인할 수 없습니다. IncludeMetadataConvention가 DbModelBuilder 규칙에 추가되었는지 확인하십시오. > Buisness.mdf 더 -

나는 Database.SetInitializer<BuisnessContext>(null);

그럼 내가 그 테이블에 사용자가 그리고 난 내 APP_DATA 폴더에있는 모든 테이블을 찾지 못했습니다 존재 doesen't 오류를 geted Database.SetInitializer<BuisnessContext>(new BuisnessInitializer()); 아 파크 변경 시도 데이터베이스가 생성되었지만 테이블이있었습니다.

저는 BuisnessContext에서 One to many 또는 이와 비슷한 코드를 넣어야한다고 생각합니다.하지만 어떻게해야할지 모르겠다.

도움주세요.

+0

가능한 복제본 [EF 4 코드 첫 번째 : EdmMetadata 유형이 모델에 포함되어 있지 않기 때문에 모델 호환성을 확인할 수 없습니다.] (http://stackoverflow.com/questions/8630755/ef-4-code-first-model -compatibility-edmmetadata-t)를 사용할 수 없습니다. 특히 수락 된 답변에 대한 의견 –

+0

나는 이것이 내가 가진 문제가 아니라고 생각하고있다. 나는 DB와 혼란이 있다는 것을 발견했다. 왜냐하면 나는 사용자 (User)를 더 많은 카테고리 (Categories)로, 카테고리 (Categories)를 더 많은 제품 (Product)에, 사용자 (User)를 더 많은 제품 (Products)으로 연결했기 때문에 이것은 순환이고 나는 다른 방법으로는 할 수 없다.그래서 나는 관계 사이클링을 제거하고 작동합니다. 내가 필요로하는 나의 관계를 위해 일하는 방법? –

+0

내가 찾은 저를위한 좋은 대답은 : http://stackoverflow.com/questions/7367339/net-mvc-cyclical-reference-issue-with-entity –

답변

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

이유는 내가 좋아하는 같은 테이블에 대한 몇 가지 다른 경로를 만드는 중이라서 여기에 있다는 것입니다 사용자 - 카테고리, 사용자 - 카테고리 - 제품, 카테고리 - 제품, 사용자 - 제품 - 대출.

아마도 다른 사람들에게 좋은 답변이 될 것입니다.

관련 문제