2012-04-17 63 views
0

我有這些表:EF代碼優先多到許多額外的數據

CREATE TABLE [EDR_SECURITY].[Person](
    [ixPerson] [bigint] IDENTITY(1,1) NOT NULL, 
    [sName] [nvarchar](200) NOT NULL, 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 



CREATE TABLE [EDR_SECURITY].[SecurityGroup](
    [ixSecurityGroup] [bigint] IDENTITY(1,1) NOT NULL, 
    [sName] [nvarchar](200) NOT NULL, 
    [sDescription] [nvarchar](400) NULL, 
) ON [PRIMARY] 


CREATE TABLE [EDR_SECURITY].[PersonSecurityGroupDefinition](
    [ixPerson] [bigint] NOT NULL, 
    [ixSecurityGroup] [bigint] NOT NULL, 
    [fPrivilege] [bigint] NOT NULL, 
CONSTRAINT [PK_PersonSecurityGroupDefinition] PRIMARY KEY CLUSTERED 
(
    [ixPerson] ASC, 
    [ixSecurityGroup] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

如何在EF創建代碼優先PersonSecurity Group之間的關係?

謝謝。

+1

如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)以精確地格式化和語法突出顯示它! – 2012-04-17 21:20:33

+0

對不起,我忘了。 – 2012-04-18 10:42:45

回答

4

如果我從原始SQL瞭解究竟...

編輯:和您的特定情況下,建議我認爲這至少是非常接近...

public class Person 
{ 
    public int PersonID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<PersonSecurityGroupDefinition> 
     PersonSecurityGroups { get; set; } 
} 
public class SecurityGroup 
{ 
    public int SecurityGroupID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<PersonSecurityGroupDefinition> 
     PersonSecurityGroups { get; set; } 
} 
public class PersonSecurityGroupDefinition 
{ 
    public int PersonID { get; set; } 
    public int SecurityGroupID { get; set; } 
    public int Privilege { get; set; } 
    // don't use virtual here as these are PK-s 
    public Person Person { get; set; } 
    public SecurityGroup SecurityGroup { get; set; } 
} 

...和在OnModelCreating(覆蓋在你的DbContext ...

modelBuilder.Entity<PersonSecurityGroupDefinition>() 
    .HasKey(i => new { i.PersonID, i.SecurityGroupID }); 

modelBuilder.Entity<PersonSecurityGroupDefinition>() 
    .HasRequired(i => i.Person) 
    .WithMany(u => u.PersonSecurityGroups) 
    .HasForeignKey(i => i.PersonID) 
    .WillCascadeOnDelete(false); 

modelBuilder.Entity<PersonSecurityGroupDefinition>() 
    .HasRequired(i => i.SecurityGroup) 
    .WithMany(d => d.PersonSecurityGroups) 
    .HasForeignKey(i => i.SecurityGroupID) 
    .WillCascadeOnDelete(false); 

...希望這是它。

+0

我可以讓用戶有很多角色。 – 2012-04-18 10:42:08

+0

我也一樣,仔細觀察 - 這是索引表,它是多對多的 - 你只需要用SecurityWroup替換用戶w/Person,Role和PersonSecurityGroupDefinition就是UserRole。 – NSGaga 2012-04-18 12:53:15

+0

你真的可以花更多的時間用問題中的名字替換類和屬性名稱,並顯示其他兩個實體的外觀。你知道完整的答案,它只是覺得有點懶,複製並粘貼到答案的另一個模型,並說「這裏,這是非常相似」。 – Slauma 2012-04-18 15:39:30