2012-04-17 10 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、またはデータサンプルを投稿する場合は、**これらの行をテキストエディタで強調表示し、エディタツールバーの "コードサンプル"ボタン( '{}')をクリックすると、フォーマットや構文が強調表示されます。 –

+0

ごめんなさい。 –

答えて

4

私は生のSQLから、正確に理解したら...

EDIT:あなたの特定のケースで提案されているように、私は...これは、少なくともかなり近いと思い

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; } 
} 

...と...あなたの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); 

OnModelCreating(オーバーライドで、これはそれであると思います。

+0

私は多くの役割を持つユーザーを持つことができます。 –

+0

私もあまりにも、密接に見て - これはインデックステーブル、それは多対多です - あなただけのユーザーw /人、ロールをSecurityGroupと置き換える必要があり、PersonSecurityGroupDefinitionはUserRoleです。 – NSGaga

+0

あなたは実際に、クラス名とプロパティ名を質問の名前に置き換え、他の2つのエンティティがどのように見えるかを表示するのに1分を費やすことができました。あなたは完全な答えを知っていて、答えに別のモデルをコピー&ペーストして、「ここ、これは非常に似ています」と少し怠惰に感じます。 – Slauma