首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fluent-nhibernate:没有得到记录

fluent-nhibernate:没有得到记录
EN

Stack Overflow用户
提问于 2011-01-13 14:36:46
回答 1查看 770关注 0票数 0

我有个实体

代码语言:javascript
复制
public class SKU
{
    //public int Id { get; set; }
    public string FactoruCode { get; set; }
    public string Ptoduct { get; set; }
}

和映射定义为

代码语言:javascript
复制
 public class SKUMap : ClassMap<SKU>
    {
        public SKUMap()
        {            
            Table("MST_PRODUCT");
            Not.LazyLoad();
            Id(x => x.Ptoduct).GeneratedBy.Assigned();
            Map(x => x.Ptoduct, "PRODUCT_NAME");
            Map(x => x.FactoruCode, "FACTORY_CODE");
        }
    }

并检索记录如下

代码语言:javascript
复制
class Program
{
    static void Main()
    {
        var sessionFactory = CreateSessionFactory();
        using (var session = sessionFactory.OpenSession())
        {
            using (session.BeginTransaction())
            {
                var skus = session.CreateCriteria(typeof(SKU)).List<SKU>();
                foreach (var sku in skus)
                {
                    Console.WriteLine(sku.Ptoduct);
                }
            }
        }
    }
    private static ISessionFactory CreateSessionFactory()
    {
        var cfg = OracleClientConfiguration.Oracle10
            .ConnectionString(c =>
                              c.Is(
                                  @"DATA SOURCE=SERVER_NAME;PERSIST SECURITYINFO=True;USER ID=USER_ID;Password=PWD"));
        return Fluently.Configure()
            .Database(cfg).Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>())
            .ExposeConfiguration(BuildSchema).BuildSessionFactory();
    }
    private static void BuildSchema(NHibernate.Cfg.Configuration config)
    {
        new SchemaExport(config).Create(false, true);
    }

}

但是该表的列比为实体指定的列多。这段代码执行得很好,但我无法获得SKU的列表(表有8000多行)。

请帮助我理解这个问题。

EN

回答 1

Stack Overflow用户

发布于 2011-01-13 15:01:00

你的SKU地图错了。为什么要将PRODUCT_NAME定义为Id列?您需要通过将Id设置为Id列来修复它(您已经注释掉该列):

代码语言:javascript
复制
Id(x => x.Id, "NAME_OF_YOUR_ID_COLUMN_HERE").GeneratedBy.Assigned();
Map(x => x.Ptoduct, "PRODUCT_NAME");

如果PRODUCT_NAME确实是Id,则需要像这样设置它:

代码语言:javascript
复制
Id(x => x.Ptoduct, "PRODUCT_NAME").GeneratedBy.Assigned();

并移除另一行:

代码语言:javascript
复制
Map(x => x.Ptoduct, "PRODUCT_NAME");

另外,如果您的数据库有更多的字段或表,那么您正在映射,它会给您带来许多错误。要解决这些问题,需要在配置中将use_proxy_validator设置为false

编辑:

NHibernate需要Id列才能正常工作。我甚至不知道如果没有将列声明为Id列,它是否工作。即使您将Ptoduct声明为Id列,也无法正确地查询数据库,因为使用相同的Ptoduct查询所有对象都会返回最顶层的对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4681201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档