EF Code First CTP 5를 사용하여 이진 (파일) 데이터를 저장하고 검색하는 간단한 방법이 있는지 알아 보려고합니다. FILESTREAM 유형을 사용하고 싶지만 실제로 작동하도록 만드는 방법을 찾고 있습니다.
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는 즉시 사용할 수 있습니다.