0

我有一個Article,它有一個User表的創建者和修飾符。這裏是模型:如何在兩個表之間建立兩個關係?

public class Article 
{ 
    public int ArticleId { get; set; } 
    public string Name { get; set; } 
    public int UserId { get; set; } 
    public int ModifierId { get; set; } 
    public virtual User User { get; set; } 
    public virtual User Modifier { get; set; } 
} 

這裏是User型號:

public class User 
{ 
    public int UserId { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
    public virtual List<Article> Articles { get; set; } 
} 

而且我已經試過這樣:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelBuilder.Entity<Article>().HasRequired(c => c.User).WithMany(u => u.Articles).HasForeignKey(c => c.UserId); 
     modelBuilder.Entity<Article>().HasRequired(c => c.Modifier).WithMany(u => u.Articles).HasForeignKey(c => c.ModifierId); 
     Database.SetInitializer<Context>(null); 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 

但錯誤是:

指定的模式無效。錯誤:關係 'Portal.Infrastructure.Repository.Article_User'未加載,因爲 'Portal.Infrastructure.Repository.User'類型不可用。

我使用EF6代碼優先和.net4.5

回答

1

試試這個代碼:

public class Article 
{ 
public int ArticleId { get; set; } 
public string Name { get; set; } 
public int UserId { get; set; } 
public int ModifierId { get; set; } 

[InverseProperty("UserArticles")] 
[ForeignKey("UserId")] 
public virtual User User { get; set; } 

[InverseProperty("ModifierArticles")] 
[ForeignKey("ModifierId")] 
public virtual User Modifier { get; set; } 
} 


public class User 
{ 
public int UserId { get; set; } 
public string Username { get; set; } 
public string Password { get; set; } 
public string Name { get; set; } 
public bool IsActive { get; set; } 

[InverseProperty("User")] 
public virtual List<Article> UserArticles { get; set; } 

[InverseProperty("Modifier")] 
public virtual List<Article> ModifierArticles { get; set; } 
} 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Article>().HasRequired(c => c.User).WithMany(u => u.UserArticles).HasForeignKey(c => c.UserId).WillCascadeOnDelete(false); 
     modelBuilder.Entity<Article>().HasRequired(c => c.Modifier).WithMany(u => u.ModifierArticles).HasForeignKey(c => c.ModifierId).WillCascadeOnDelete(false); 

     . 
     . 
     . 
     . 
    } 
0

我發現這個問題。我爲如下背景:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Article>().HasRequired(c => c.User).WithMany().HasForeignKey(c => c.UserId); 
    modelBuilder.Entity<Article>().HasRequired(c => c.Modifier).WithMany().HasForeignKey(c => c.ModifierId); 
    Database.SetInitializer<Context>(null); 
    base.OnModelCreating(modelBuilder); 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 

而且我也改變了User模式是這樣的:

public class User 
{ 
    public int UserId { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
} 
+0

還算可以,但你不能使用偷懶在用戶中加載。 – Iraj

+0

@Iraj是的,你是對的。所以這不可能是一個完美的答案。 –

相關問題