C# 如何将标准值应用于使用Glass.Mapper创建的项目

C# 如何将标准值应用于使用Glass.Mapper创建的项目,c#,sitecore,sitecore7,glass-mapper,C#,Sitecore,Sitecore7,Glass Mapper,我通过Glass创建Sitecore项目。映射器如下: var homeItem = sitecoreContext.GetHomeItem<HomeItem>(); // Create the car item ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4}); T Create<T, TK>(TK parent, string newName

我通过Glass创建Sitecore项目。映射器如下:

var homeItem = sitecoreContext.GetHomeItem<HomeItem>();

// Create the car item
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4});
T Create<T, TK>(TK parent, string newName, Language language = null, bool updateStatistics = true, bool silent = false) where T : class where TK : class;
var homeItem = sitecoreContext.GetHomeItem<HomeItem>();

var carName = "Some New Name";

// Create the car item
// I don't know what the type of BooksFolder is so you would put that in the place of Folder.
ICar car = sitecoreService.Create<Car, Folder>(homeItem.BooksFolder, carName);
car.Tires = 4;
car.Seats = 4;

sitecoreService.Save(car);
var homeItem=sitecoreContext.GetHomeItem();
//创建汽车项目
ICar car=sitecoreService.Create(homeItem.BooksFolder,新车{Tires=4,Seats=4});
这是可行的,除非汽车模板上的标准值不适用,或者如果它们是,它们将立即被新车属性覆盖。因此,如果Car对象的Color属性的值为null,则该null将写入字段,而不是Car模板上标准值中的“绿色”值

我一直在寻找一种合理的方法来通过Glass.Mapper实现这一点,但什么也没找到。
有没有办法通过Glass.Mapper执行此操作?

有一种方法可以执行此操作,请使用如下所示的Create方法覆盖:

var homeItem = sitecoreContext.GetHomeItem<HomeItem>();

// Create the car item
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4});
T Create<T, TK>(TK parent, string newName, Language language = null, bool updateStatistics = true, bool silent = false) where T : class where TK : class;
var homeItem = sitecoreContext.GetHomeItem<HomeItem>();

var carName = "Some New Name";

// Create the car item
// I don't know what the type of BooksFolder is so you would put that in the place of Folder.
ICar car = sitecoreService.Create<Car, Folder>(homeItem.BooksFolder, carName);
car.Tires = 4;
car.Seats = 4;

sitecoreService.Save(car);
T Create(TK parent,string newName,Language Language=null,bool updateStatistics=true,bool silent=false),其中T:class,其中TK:class;
因此,您的代码如下所示:

var homeItem = sitecoreContext.GetHomeItem<HomeItem>();

// Create the car item
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4});
T Create<T, TK>(TK parent, string newName, Language language = null, bool updateStatistics = true, bool silent = false) where T : class where TK : class;
var homeItem = sitecoreContext.GetHomeItem<HomeItem>();

var carName = "Some New Name";

// Create the car item
// I don't know what the type of BooksFolder is so you would put that in the place of Folder.
ICar car = sitecoreService.Create<Car, Folder>(homeItem.BooksFolder, carName);
car.Tires = 4;
car.Seats = 4;

sitecoreService.Save(car);
var homeItem=sitecoreContext.GetHomeItem();
var carName=“一些新名称”;
//创建汽车项目
//我不知道BookFolder是什么类型的,所以你可以把它放在Folder的位置。
ICar car=sitecoreService.Create(homeItem.BooksFolder,carName);
汽车轮胎=4;
汽车座椅=4个;
sitecoreService.Save(汽车);

我们遇到了同样的问题,这就是我们解决问题的方法。

您可以通过调用EditContext中包装的Sitecore的reset()方法将所需字段重置回其标准值

var homeItem = sitecoreContext.GetHomeItem<HomeItem>();

// Create the car item
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4});

using(new EditContext())
{
    car.Fields["Color"].Reset();
}
var homeItem=sitecoreContext.GetHomeItem();
//创建汽车项目
ICar car=sitecoreService.Create(homeItem.BooksFolder,新车{Tires=4,Seats=4});
使用(新的EditContext())
{
car.Fields[“Color”].Reset();
}

请参见

工作正常!我想,当你从一个对象创建一个新项目时,你会得到该对象中的确切内容,没有默认值,但当你从一个名称创建它时,你会得到一个应用了标准值的项目。@T.J.Kjaer我不同意这个“有意义”-有意义的是有一个正确命名的create方法,指示是否应用标准值:)