我有以下EF 5.0实体:
public class Pack {
public Int32 Id { get; set; }
public virtual ICollection<File> Files { get; set; }
} // Pack
public class File {
public Int32 Id { get; set; }
public Byte[] Data { get; set; }
} // File
使用通用存储库我需要获取ONE pack及其文件ID,而不是数据。
在我的通用存储库中,我有以下方法:
public T First<T>(Expression<Func<T, Boolean>> criteria) where T : class {
return _context.Set<T>().FirstOrDefault(criteria);
} // First
我正在获取Pack并映射到PackDtoModel,如下所示:
Pack pack = _repository.First<Pack>(x => x.Id == packId);
PackDtoModel model = new PackDtoModel {
Id = pack.Id,
FilesIds = pack.Files.Select(x => x.Id).ToList()
}
这是加载文件数据字段吗?我不希望这样!
我应该使用投影来避免加载文件数据吗?
如果是,怎么样?第一种方法返回T而不是IQueryable。
我正在使用Configuration.LazyLoadingEnabled = true ...
使用表格分割我可以使用以下内容:
create table dbo.Packs
(
Id int identity not null
constraint Packs_Id_PK primary key clustered (Id)
);
create table dbo.Files
(
Id int not null
constraint Files_Id_PK primary key clustered (Id),
Data varbinary (max) filestream null
constraint Files_Data_DF default (0x),
[Key] uniqueidentifier rowguidcol not null
constraint Files_Key_U unique,
Mime nvarchar (200) not null,
CONSTRAINT Files_ID_Mime_UQ UNIQUE (Id, Mime)
) filestream_on [STORAGE];
add constraint Files_Id_FK foreign key (Id) references dbo.Packs(Id) on delete cascade on update cascade;
因此文件ID与包ID相同。
我添加了一个约束,以便文件ID和MIME是唯一的。
所以现在在我的应用程序中我会使用:获取ID = PACKID&amp; MIME =“image / jpg”。
我收到包装的那一刻,我知道与该包装相关的文件的ID。
我只需要指定我想要的版本(mime)......
您怎么看?
我现在的问题是如何将其映射到实体......
理论上我应该还有很多文件:
public class Pack {
public Int32 Id { get; set; }
public virtual ICollection<File> Files { get; set; }
} // Pack
但是如何设置这种关系?
谢谢你, 米格尔