설명해 드리겠습니다.EF 코드 문제로 데이터베이스 생성
새 프로젝트 (MVC5)를 시작하고 EF 비디오 예제에서 2 개의 테이블 (블로그 및 게시물)이있는 데이터베이스를 만들었습니다. 데이터베이스에 관계를 만든 다음 VistualStudioGallery.com에서 EF 도구를 다운로드했습니다.
그런 다음 도구를 사용하여 테이블을 리버스 엔지니어링하여 컨텍스트 및 모델 클래스/매핑을 생성했습니다.
지금까지 그렇게 좋았습니다.
는 그럼 같이하는 DB 컨텍스트를 수정 :public partial class EfExampleContext : IdentityDbContext<ApplicationUser>
{
public EfExampleContext()
: base("Name=DefaultConnection")
{
}
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new BlogMap());
modelBuilder.Configurations.Add(new PostMap());
}
}
은 그 때 나는 데이터베이스를 삭제 F5는 그것이 한 내 데이터베이스를 생성 할 희망에 내 프로젝트를 실행. 나는 그것이
게시물를, 생성 된 것으로 나타났습니다
블로그,
AspNetUsers,
AspNetUserRoles,
AspNetRoles,
AspNetUserClaims 올바른 열 및 관계 AspNetUserLogins 테이블. 다음 데이터베이스 및 AspNetUser 모델을 삭제했습니다.
- EntityFramework
- 마이크로 소프트 Asp.net 신원 코어
- 마이크로 소프트 Asp.net 신원 EntityFramework
- 마이크로 소프트 Asp.net 신원 Owin
후 설치 : 나는 다음에 대한 참조를 제거 그들에게 최신 버전. IdentityUser () AspNetUser (약간의 차이가 있습니다)과 함께 작업하기 때문에이 작업을 수행했습니다.
public class IdentityUser : IUser
{
public IdentityUser();
public IdentityUser(string userName);
public virtual ICollection<IdentityUserClaim> Claims { get; }
public virtual string Id { get; set; }
public virtual ICollection<IdentityUserLogin> Logins { get; }
public virtual string PasswordHash { get; set; }
public virtual ICollection<IdentityUserRole> Roles { get; }
public virtual string SecurityStamp { get; set; }
public virtual string UserName { get; set; }
}
주 ICollection에 탐색 속성 ...은 다음과 같습니다
IdentityUser을
나는 다음 F5 내 데이터베이스를 만들려면 내 프로젝트를 실행하고 문제가 시작된 곳이다. 당신이 볼 수 있듯이public class IdentityUserLogin
{
public IdentityUserLogin();
public virtual string LoginProvider { get; set; }
public virtual string ProviderKey { get; set; }
public virtual IdentityUser User { get; set; }
public virtual string UserId { get; set; }
}
에서, IdentityUser이 여러 로그인을 가질 수 있고, 로그인 하나 사용자가 있습니다 IdentityUserLogin 모델은 다음과 같습니다.나는 그 프로젝트에게 IdentityUserLogins를 실행하면 테이블은 다음과 같습니다
CREATE TABLE [dbo].[IdentityUserLogins](
[UserId] [nvarchar](128) NOT NULL,
[LoginProvider] [nvarchar](max) NULL,
[ProviderKey] [nvarchar](max) NULL,
[User_Id] [nvarchar](128) NULL,
CONSTRAINT [PK_dbo.IdentityUserLogins] PRIMARY KEY CLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
여기에 뭔가 문제가있다. UserId는 PK이므로 0시에서 많은 관계로 IdentityUsers이 될 수 없으므로 EF가 다른 User_Id 열을 추가하는 이유입니다.하지만 의미가 없습니다.
제 질문은, 이전에이 문제가 발생 했습니까? 그렇다면 정확한 매핑을 어떻게 수정하여 수정할 수 있습니까?
분명히 내가 ICollection에 하나의 참조를 만들기 위해 IdentityUser에게 클래스를 변경할 수 있습니다 (즉 아닌 컬렉션)/r3plica
유창 API 인해를 사용하여지도가 할 수있는 방법이 있나요 IdentityUserLogin 클래스에 액세스 할 수 없거나 제한을 추가하기 위해 해당 속성을 재정의 할 수 있습니까? – r3plica
추가 할 때 다음 오류가 나타납니다. dentityUserLogin_User_Source :: Multiplicity가 'IdentityUserLogin_User'관계에서 'IdentityUserLogin_User_Source'역할에 유효하지 않습니다. 종속 역할은 주요 속성을 참조하므로 종속 역할의 다중도의 상한은 '1'이어야합니다. – r3plica