2012-04-17 56 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