Login
개체의 속성으로 사용하려는 다음 클래스가 있습니다. 이 클래스는 모든 탐색 속성이없는 것을 선호합니다 (가능한 빠른 검사를 위해 사용될 것입니다). 가능하면 가능하지만 아래에 표시된 것을 허용 할 것입니다.복합 키가있는 Entity Framework의 일대 다 관계
public class LoginFeature
{
[Key, Column(Order = 0)]
public int RoleId { get; set; } //Role is another table in the db, but not looking for a nav. property or constraint here.
[Key, Column(Order = 1)]
public virtual Login Login { get; set; }
public bool Deny { get; set; }
}
이들의 컬렉션을 포함하는 클래스는
public class Login
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; } //Database ID
public virtual List<LoginFeature> LoginFeatures { get; set; }
}
내 DbContext가
public class MyContext : DbContext
{
public DbSet<Login> Logins { get; set; }
public DbSet<LoginFeature> LoginFeatures { get; set; }
}
로 정의하지만, 다음 테스트가 말하는 오류가 발생합니다 (공간을 벗었)되어
을 그System.Data.Entity.Inf rastructure.DbUpdateException : 해당 관계의 외래 키 속성을 노출하지 않는 엔터티를 저장하는 동안 오류가 발생했습니다. 단일 엔터티를 예외 소스로 식별 할 수 없으므로 EntityEntries 속성은 null을 반환합니다. 엔터티 형식에 외래 키 속성을 노출하면 저장 중에 예외를 쉽게 처리 할 수 있습니다. 자세한 내용은 InnerException을 참조하십시오. ----> System.Data.UpdateException : 항목을 업데이트하는 동안 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오. ----> System.Data.SqlClient.SqlException : 열 'RoleId'테이블에 NULL 값을 삽입 할 수 없습니다 'TEST.dbo.LoginFeatures'테이블; 열이 널을 허용하지 않습니다. INSERT가 실패합니다. 명세서가 종료되었습니다.
[Test]
public void LoginCanHaveFeatures()
{
using (var ctx = new MyContext())
{
var login = ctx.Logins.FirstOrDefault(x => x.Id == 30);
Assert.IsNotNull(login);
for (int i = 10; i < 15; i++)
{
var feature = new LoginFeature();
feature.Login = login;
feature.RoleId = i;
feature.Deny = true;
login.LoginFeatures.Add(feature);
}
ctx.SaveChanges();
}
}
는 SQL이 EFProf에서 쇼로 생성되는 것은 LoginFeature
이 잘못에 데이터 주석 속성을 암시하는 것 같다
insert [dbo].[LoginFeatures]
([Deny],
[Login_Id])
values (1 /* @0 */,
30 /* @1 */)
입니다. 내가 할 수있는 일이 가능합니까?
감사합니다,
조