我读过各种各样的东西,但我没有看到具体的东西,所以我要重新发布。对不起,如果我错过了一个并重复发布。
我将文件存储在数据库中;以前,使用ADO.NET Entity Framework,我会使用图像类型,并将其作为byte []数组流式传输。
这是使用FluentNHibernate映射在NHibernate中进行的方法吗?我将列设置为图像。我将其定义为属性的映射(C#属性是byte []数组):
Map(i => i.FileContents).CustomSqlType("image");
这是正确的设置方法吗?我收到错误,不确定它是否与此相关?
感谢。
答案 0 :(得分:1)
您不需要自定义类型。以下是适用于名为Content:
的SQL Server映像列的映射 Map(x => x.Content);
以下是该映射的用法:
byte[] content = nhSession.CreateCriteria<AttachmentContent>()
.Add<AttachmentContent>(ac => ac.Id == 3)
.SetProjection(Projections.Property("Content"))
.UniqueResult<byte[]>();
...这里有一种没有映射的方法(AttachmentDTO不是映射的NH类,只是一个普通的类):
nhSession.CreateSQLQuery("select a.Content from Attachments a where a.Id = 1")
.SetResultTransformer(Transformers.AliasToBean(typeof(AttachmentDTO)))
.UniqueResult<AttachmentDTO>();
这是DTO课程:
public class AttachmentDTO {
public int Id { get; set; }
public string ContentType { get; set; }
public byte[] Content { get; set; }
}
祝你好运!
答案 1 :(得分:1)
您还可以将Custom<TType>
映射到NHibernate.Type
类型
例如:
Map(i => i.FileContents).Custom<NHibernate.Type.BinaryBlobType>();
我已经将存储为二进制的文件映射,但它们不是“图像”类型。
我做了一个快速的谷歌搜索,发现了一个带有ImageUserType的帖子,您可以尝试指定。 http://weblogs.asp.net/ricardoperes/archive/2009/09/17/nhibernate-image-user-type.aspx
修改。此用户类型看起来好多了:http://www.martinwilley.com/net/code/nhibernate/usertype.html
答案 2 :(得分:0)
我在PostgreSQL中有bytea
列的下表:
CREATE TABLE "SystemFiles"
(
id integer NOT NULL,
name character varying(64),
contenttype character varying(64),
data bytea,
CONSTRAINT pk_id PRIMARY KEY (id)
)
这是我的实体:
public class SystemFiles
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string ContentType { get; set; }
public virtual byte[] Data { get; set; }
}
这就是我的映射的样子:
public class SystemFilesMap : ClassMap<SystemFiles>
{
public SystemFilesMap()
{
Id(x => x.Id, "id").GeneratedBy.Identity();
Map(x => x.Name).Column("name");
Map(x => x.ContentType).Column("contenttype");
Map(x => x.Data).Column("data");
}
}
通过上面的配置,我可以从/向数据库中读取,保存,删除文件......
控制器:
using (var session = RisDbHelper.OpenSession())
{
var tempImage = (from c in session.Query<SystemFiles>() where c.Name == "Logo" select c).FirstOrDefault();
model.LogoImage = Convert.ToBase64String(tempImage.Data);
}
查看:
@if (!String.IsNullOrEmpty(Model.LogoImage))
{
<img src="@String.Format("data:image/png;base64,{0}", Model.LogoImage)" style="width: 200px"/>
}