zoukankan      html  css  js  c++  java
  • orchard模块编写的错误及其解决办法

    在编写自定义模块的时候,出现了一些意想不到的的错误,在解决这些问题的时候,加深了对orchard开发的认识。

    1、编写了part,编辑的时候总是不出现part的界面

       检查了所有文件,最后发现在partDriver类中没有将Service添加到构造函数,

    原来的写法:

      public class FixedAssetPartDriver : ContentPartDriver<FixedAssetPart>
        {
            private readonly INotifier _notifier;
            private const string TemplateName = "Parts/FixedAsset";
            private readonly IFixedAssetService _service;
    
            protected override string Prefix
            {
                get { return "FixedAsset"; }
            }
    
            public Localizer T { get; set; }
    
            public FixedAssetPartDriver(INotifier notifier)
          //public FixedAssetPartDriver(INotifier notifier,IFixedAssetService service)
            {
                _notifier = notifier;
              //  _service = service;
                T = NullLocalizer.Instance;
            }

    更新后的写法:

     public FixedAssetPartDriver(INotifier notifier,IFixedAssetService service)
            {
                _notifier = notifier;
                _service = service;
                T = NullLocalizer.Instance;
            }
    IFixedAssetService 没有实例化,导致她调用的数据,不能出现,也就没有part页面出来了。

    2、更新数据的时候,出现null id的错误,找了几天都没找到原因。最新看文档,发现一个细节没有注意
    看原来的代码:
     public class FixedAssetPart : ContentPart<FixedAssetPartRecord> {
            public string AssetCode {
                get { return Record.AssetCode; }
                set { Record.AssetCode = value; }
            }
            public string AssetName
            {
                get { return Record.AssetName; }
                set { Record.AssetName = value; }
            }
    
            public string Brand
            {
                get { return Record.Brand; }
                set { Record.Brand = value; }
            }
    
            public decimal AssetValue
            {
                get { return Record.AssetValue; }
                set { Record.AssetValue = value; }
            }
            public AssetBuyMethodRecord AssetBuyMethod
            {
                get { return Record.AssetBuyMethod; }
                set { Record.AssetBuyMethod = value; }
            }
         

    migration类:

     SchemaBuilder.CreateTable(typeof(FixedAssetPartRecord).Name,
                    t => t.ContentPartRecord()
                        .Column<string>("AssetCode")
                        .Column<string>("AssetName")
                        .Column<string>("Brand")
                        .Column<decimal>("AssetValue")
                        .Column<int>("AssetBuyMethodRecord_Id")
                       
    
                        );

    想当然的认为,FixedAssetPartRecord与AssetBuyMethodRecord是一对多的关系,所有FixedAssetPartRecord的表的列应该是AssetBuyMethodRecord_Id

    实际上应该是FixedAssetPart的属性的名称加_Id的命名,即AssetBuyMethod_Id

    所以,migration.cs的建表时应该是:

     SchemaBuilder.CreateTable(typeof(FixedAssetPartRecord).Name,
                    t => t.ContentPartRecord()
                        .Column<string>("AssetCode")
                        .Column<string>("AssetName")
                        .Column<string>("Brand")
                        .Column<decimal>("AssetValue")
                        .Column<int>("AssetBuyMethod_Id")
                    
    
                        );

    就这么一个小的细节,折磨了我整整三天时间才找到原因。

  • 相关阅读:
    scrum
    control.begininvoke
    ChangeBrowsePosition Method
    常见linux命令(表格分类)
    Python 之优先级排序
    Python 之分辨双胞胎:copy(浅拷贝)与 deepcopy(深拷贝)
    字符编码学习总结
    Python 多继承方式及顺序
    AttributeError: module 'datetime' has no attribute 'now' ------解决方法之一
    Python 模块定义、导入、优化详解
  • 原文地址:https://www.cnblogs.com/zsanhong/p/3132409.html
Copyright © 2011-2022 走看看