свободно-nhibernate: не получать записи - PullRequest
0 голосов
/ 13 января 2011

У меня есть такая сущность, как

public class SKU
{
    //public int Id { get; set; }
    public string FactoruCode { get; set; }
    public string Ptoduct { get; set; }
}

, и отображение определено как

 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");
        }
    }

, и я получаю записи типа

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 строк).

Пожалуйста, помогите мне разобраться в проблеме.

1 Ответ

2 голосов
/ 13 января 2011

Ваша карта SKU неверна. Почему вы определили PRODUCT_NAME как столбец идентификатора? Вам нужно исправить это, установив Id в столбец Id (который вы закомментировали):

Id(x => x.Id, "NAME_OF_YOUR_ID_COLUMN_HERE").GeneratedBy.Assigned();
Map(x => x.Ptoduct, "PRODUCT_NAME");

Если PRODUCT_NAME действительно Id, вам нужно установить его следующим образом:

Id(x => x.Ptoduct, "PRODUCT_NAME").GeneratedBy.Assigned();

и удалите другую строку:

Map(x => x.Ptoduct, "PRODUCT_NAME");

Кроме того, если в вашей базе данных больше полей или таблиц, чем вы отображаете, это может привести к множеству ошибок. Чтобы разрешить их, вам нужно установить use_proxy_validator в false в вашей конфигурации.

EDIT:
NHibernate требует столбец Id для правильной работы. Я даже не знаю, что, если это действительно работает без фактического объявления столбца как столбца Id. Даже если вы объявите Ptoduct в качестве столбца Id, вы не сможете правильно запросить базу данных, поскольку запрос любого из всех объектов с одинаковым Ptoduct вернет самый верхний объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...