【发布时间】:2016-04-20 02:51:12
【问题描述】:
我正在尝试为我的 DBContext (db) 和 IDbSet 之一创建扩展方法。我希望能够像这样调用扩展:
db.UploadedFile.AddFile
(
SessionUser.ProfileId,
model.UploadingFile.FileName,
serverPath,
model.ProjectSubmissionId
);
这似乎可行,但我想稍后,在 db.SaveChanges() 之后,获取附加值的主键 ID。
这是我目前所拥有的:
public static class UploadedFileExtensions
{
public static bool AddFile
(
this IDbSet<UploadedFile> files,
Guid uploadedByProfileId,
string fileName,
string filePath,
Guid? associatedWithId
)
{
var newFile = new UploadedFile
{
UploadedByProfileId = uploadedByProfileId,
FileName = fileName,
FilePath = filePath,
FileExtension = Path.GetExtension(fileName),
Submitted = DateTime.Now,
Modified = DateTime.Now,
IsActive = true
};
if (associatedWithId != null) newFile.AssociatedWithId = associatedWithId;
return files.AddFile(newFile);
//return true;
}
public static bool AddFile(this IDbSet<UploadedFile> files, UploadedFile file)
{
files.Add(file);
return true;
}
}
【问题讨论】:
-
您的数据库上下文在哪里?您是否在使用存储库和工作单元模式?
-
当我们开始这个项目时,我们被告知我们不需要存储库模式。我不同意,但这就是我们要走的路。我仍然认为我们可以开始使用存储库模式。有哪些有当前示例的好网站?
-
值得一提的是,如果您实现存储库/工作单元,则不需要扩展方法,它可以成为存储库的一部分(最好以通用形式)。使用模式也有缺点,尽管它们可能会限制某些事情,所以你不应该急于做出改变
标签: c# entity-framework extension-methods