您的位置:首页 > 其它

orchard模块编写的错误及其解决办法

2013-06-12 07:41 567 查看
在编写自定义模块的时候,出现了一些意想不到的的错误,在解决这些问题的时候,加深了对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")

);


就这么一个小的细节,折磨了我整整三天时间才找到原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐