EF Code First CTP 5를 사용하여 이진 (파일) 데이터를 저장하고 검색하는 간단한 방법이 있는지 알아 보려고합니다. FILESTREAM 유형을 사용하고 싶지만 실제로 작동하도록 만드는 방법을 찾고 있습니다.
답변
FILESTREAM
EF 에서는 SQL 을 사용할 수 없습니다 . EF는 다른 데이터베이스 서버에서 작동하도록되어 있지만 파일 스트림 기능은 SQL 2008 이상의 특정 기능입니다. 이전 방식으로 시도해 볼 수 있습니다- varbinary(max)
데이터베이스 테이블에서 사용하고 매핑 된 클래스에서 바이트 배열을 사용합니다.
편집하다:
약간의 설명- FILESTREAM
데이터베이스에서 사용할 수 있지만 EF는 스트리밍을 활용하지 않습니다. 표준으로로드됩니다 varbinary(max)
.
답변
ProductImage
지연 로딩을 관리하고 테이블을 정규화하기 위해 항상 일대일 연결 과 같은 다른 클래스를 만듭니다 .
public class ProductImage
{
public int ProductId { get; private set; }
public byte[] Image { get; set; }
}
답변
Ladislav가 언급 한대로 속성을 byte []로 선언하면됩니다.
public class Product
{
public int Id { get; private set; }
public string Name { get; set; }
public byte[] ProductImage { get; set; }
}
그것은 거의 다입니다. 속성을 매핑하지 않으면 규칙은 varbinary(max)
. 데이터베이스에 이미 이미지 열이있는 [Column(TypeName = "image")]
경우 ProductImage 속성에 추가 하거나 코드 매핑을 선호하는 경우 컨텍스트 클래스의 OnModelCreating 재정의에 추가합니다.
modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image");
내가 가진 문제는 제품을 가져올 때마다 이진 데이터를 반드시로드하고 싶지 않기 때문에 속성을 게으르게 만드는 방법을 찾지 못했다는 것입니다. 정확히 기억할 수는 없지만 NHibernate는 즉시 사용할 수 있습니다.