2014-10-16 77 views
0

我以代碼優先使用EF。我的模型包含兩個虛擬屬性,如:EF不爲虛擬屬性創建表

ClassA 

public int Id { get; set; } 
public string Name { get; set; } 
public virtual List<int> Teams { get; set; } 
public virtual List<int> Levels { get; set; } 

EF已爲我創建數據庫表只有ClassA表。沒有我可以存儲球隊和關卡數據的表格。當我運行Add-Migration命令時,創建的遷移文件爲空,EF認爲沒有掛起的更改。另外,當我運行更新數據庫命令EF說沒有掛起的更改。

我在這裏錯過了什麼?

+0

您不能將int作爲映射到表的實體。 – 2014-10-16 11:34:37

+0

爲什麼會有額外的表格?你沒有定義它們,或者至少沒有在你的代碼中顯示它們。 – Maarten 2014-10-16 11:34:48

回答

2

爲什麼不這樣做:

public class Team { 
    public int Id { get; set; } 
    public virtual ICollection<Player> Players { get; set; } 
} 
public class Level { 
    public int Id { get; set; } 
    public virtual ICollection<Player> Players { get; set; } 
} 
public class Player { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Team> Teams { get; set; } 
    public virtual ICollection<Level> Levels { get; set; } 
} 

如果你真的想 '重量輕'(請不要),你可以這樣做:

public class Player { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    //use comma separated values (starting and ending with ,) 
    public string Teams { get; set; } 
    public string Levels { get; set; } 
} 

說你有這些你背景

var player1 = new Player(){Teams = ",1,2,"} 
var player2 = new Player(){Teams = ",3,2,"} 

現在,你可以同時得到t eam 2 by

var players = context.Players.Where(p=>p.Teams.Contains(",2,"));