Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用主键或Guid作为图像的名称_C#_Asp.net Mvc - Fatal编程技术网

C# 使用主键或Guid作为图像的名称

C# 使用主键或Guid作为图像的名称,c#,asp.net-mvc,C#,Asp.net Mvc,我正在做一个我朋友不久前写的小cms 有这个页面,用户可以上传一个图像,并显示在他的个人资料。我想知道保存此图像的最佳方法是什么。在这个cms中,它是这样的:首先,实体被保存到数据库中,在获得它的主键后,图像被上传到服务器,类似于image-{PrimaryKey}.jpg然后再次点击数据库,用图像的全名更新同一实体。 下面是他的部分代码: 在控制器中: [HttpPost] [ValidateAntiForgeryToken] public async Task<

我正在做一个我朋友不久前写的小cms

有这个页面,用户可以上传一个图像,并显示在他的个人资料。我想知道保存此图像的最佳方法是什么。在这个cms中,它是这样的:首先,实体被保存到数据库中,在获得它的主键后,图像被上传到服务器,类似于
image-{PrimaryKey}.jpg
然后再次点击数据库,用图像的全名更新同一实体。 下面是他的部分代码:

在控制器中:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<bool> Add([Bind(Include = "IdLanguage,Title,Address,Description,IdLinksCategory")]TblLinks tblLinks, string coverPath, string coverBase64)
    {
        try
        {
            tblLinks.IdUser = await _permissionService.GetCurrentIdUser();
            tblLinks.CreatedDateTime = DateTime.Now;

            await _linkService.Add(tblLinks);

            if (!string.IsNullOrEmpty(coverPath))
            {
                byte[] fileByte = _utilityService.GetByteFromBase64String(coverBase64);

                var fileType = Path.GetExtension(coverPath);
                var fileName = string.Format("Link-{0}{1}", tblLinks.IdLink, fileType);
                var fileMapPath = fileName.GetLinkMapPath();

                System.IO.File.WriteAllBytes(fileMapPath, fileByte);

                tblLinks.ImageName = fileName;
                await _linkService.Edit(tblLinks);
            }
            return true;
        }
        catch
        {
            return false;
        }
    }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务添加([Bind(Include=“IdLanguage,Title,Address,Description,IdLinksCategory”)]TblLinks TblLinks,string coverPath,string coverBase64)
{
尝试
{
tblLinks.IdUser=await_permissionService.GetCurrentIdUser();
tblLinks.CreatedDateTime=DateTime.Now;
等待链接服务添加(tblLinks);
如果(!string.IsNullOrEmpty(coverPath))
{
byte[]fileByte=\u utilityService.GetByteFromBase64String(coverBase64);
var fileType=Path.GetExtension(coverPath);
var fileName=string.Format(“Link-{0}{1}”,tblLinks.IdLink,fileType);
var fileMapPath=fileName.GetLinkMapPath();
System.IO.File.writealBytes(fileMapPath,fileByte);
tblLinks.ImageName=文件名;
等待链接服务编辑(tblLinks);
}
返回true;
}
抓住
{
返回false;
}
}
和服务层:

    public async Task<TblLinks> Add(TblLinks links)
    {
        _eTblLinks.Add(links);
        await _uow.SaveChangesAsync();
        _cacheUpdateService.Links();
        return links;
    }

    public async Task Edit(TblLinks links)
    {
        var query = await (from k in _eTblLinks
            where k.IdLink == links.IdLink
            select k).FirstOrDefaultAsync();
        query.Title = links.Title;
        query.Address = links.Address;
        query.Description = links.Description;
        query.IdLinksCategory = links.IdLinksCategory;

        if (!string.IsNullOrEmpty(links.ImageName))
            query.ImageName = links.ImageName;

        _uow.MarkAsChanged(query);
        await _uow.SaveChangesAsync();
        _cacheUpdateService.Links();
    }
公共异步任务添加(TblLinks链接)
{
_添加(链接);
等待_uow.saveChangesSync();
_cacheUpdateService.Links();
返回链接;
}
公共异步任务编辑(TblLinks链接)
{
var query=WAIT(来自k in_eTblLinks
其中k.IdLink==links.IdLink
选择k).FirstOrDefaultAsync();
query.Title=links.Title;
query.Address=links.Address;
query.Description=links.Description;
query.IdLinksCategory=links.IdLinksCategory;
如果(!string.IsNullOrEmpty(links.ImageName))
query.ImageName=links.ImageName;
_uow.MarkAsChanged(查询);
等待_uow.saveChangesSync();
_cacheUpdateService.Links();
}
在我的工作中,我使用guid键作为图像的名称,并将其上载到服务器,而不是将此guid键与实体的其余部分一起使用,然后立即保存到数据库中


那么哪种方式更好呢?我的还是他的?

都是有效的,我不认为其中一个比另一个好(除了在数据库中进行第二次写入),假设在您的解决方案中,您将图像guid/文件名存储为实体的属性,而不将其用作实体键。

请注意,控制器中的逻辑不利于MVC分离关注点。@Dane,所以上传图片的部分应该在服务层,对吗?这是我对MVC的理解,尽管我不是专家。它只是帮助你把事情分开,这样你就可以更容易地维护你的应用程序。第二次写入数据库让我怀疑这是否是一个好方法。这一切都取决于你的应用程序负载,但这对性能没有多大影响,所以我会优先考虑从代码角度看简单、干净的应用程序。