2013-08-20 172 views
0

我試圖在代碼優先模式下使用實體框架來嘗試和存儲一些對象,並且我在關鍵代中遇到了問題(或者更確切地說,我不想改變我現有的對象插入密鑰)。這裏是我遇到的問題的一個例子:實體框架鍵列表

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Data.Entity; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication2 
{ 
public class AClass 
{ 
    [Key] 
    public int id { get; set; } 
    public List<SubClass> l; 
}; 

public class SubClass 
{ 
    public string a; 
    public string b; 
}; 

public class ADbContext : DbContext 
{ 
    public DbSet<AClass> dbset { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     ADbContext db = new ADbContext(); 

     AClass a = new AClass(); 

     a.id = 1; 
     a.l = new List<SubClass>(); 

     SubClass sc=new SubClass(); 

     sc.a = "Hello"; 
     sc.b = "World"; 

     a.l.Add(sc); 

     SubClass sca = new SubClass(); 

     sca.a = "Stack"; 
     sca.b = "Overflow"; 

     a.l.Add(sca); 

     db.dbset.Add(a); 
     db.SaveChanges(); 
    } 
} 
} 

如果你運行這個程序,然後將它錯誤說,對象子類有沒有主鍵。現在,如果我寫的手程序,而無需使用實體框架在數據庫中存儲這些對象,我會做的是有一個像表:

AClass: 
id int public key 

SubClass: 
AClass_id int foreign key references AClass(id), 
postition_in_list_id int, 
a string, 
b string, 
primary key (AClass_id,position_in_list_id) 

而且我會爲ACLASS說ID爲1我想有子類(1,1),(1,2),(1,3)如果你明白我的意思。

有什麼辦法讓Entity Framework做到這一點,還是我必須添加任意ID到SubClass?

子類從不存儲在數據庫中,除了作爲AClass的一部分。

+0

作爲一個建議,使用'using'塊用'dbcontext'處置它。 –

回答

0

嘗試了這一點:

public class SubClass 
{ 
    [ForeignKey("AClass")] 
    [Key] 
    public int AClassId {get; set;} 

    public string a; 
    public string b; 
}