我有一个名为“动物”的模型 “Animal”类有几个属性,但让我们关注以下属性:
在“Animal”类中,我可以通过执行以下操作来使CreateDate工作:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreateDate { get; set; }
这使我可以通过将数据库中的默认值设置为“GetDate()”来生成数据库中的CreateDate。
当外部调用者尝试在OData服务上“设置”CreateDate字段时,它会忽略传递的数据。
这使得它成为外部呼叫者的“只读”属性。
我需要做类似于CreateUser的操作,除了我需要在OData服务器上设置CreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Name。
如果我尝试私人套装,那么OData服务根本不会公开该属性 如果我尝试公共场景,那么外线来电者可以更改属性 在“Animal”构造函数中,我设置了内部_CreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Name
我不确定如何在服务器端设置它。
答案 0 :(得分:1)
这是我的工作。
在模型中我有以下内容:
public string CreateUser { get; set; }
[NotMapped]
public string CreateUserName
{
get
{
return CreateUser;
}
set
{
CreateUser = CreateUser ?? System.Threading.Thread.CurrentPrincipal.Identity.Name;
}
}
然后在WebApiConfig中我有以下内容:
builder.EntitySet<Animal>("Animals"));
builder.EntityType<Animal>().Ignore(p => p.CreateUser); // hide CreateUser
builder.StructuralTypes.First(t => t.ClrType == typeof(Animal))
.AddProperty(typeof(Animal).GetProperty(nameof(Animal.CreateUserName))); // show CreateUserName
答案 1 :(得分:0)
你可以用一个空的setter来伪装它。它将看到公共集并在OData实体中生成属性。不是最干净的解决方案,但它应该有效。
public class Animal
{
private string _createUser;
public string CreateUser
{
get { return _createUser; }
set { }
}
internal SetCreateUser(string user)
{
_createUser = user;
}
}