OData 属性 with internal setter -- 就像 UpdateDate
OData property with internal setter -- like UpdateDate
我有一个名为 "Animal" 的 class 模型。
"Animal" class 有几个属性,但让我们关注以下属性:
- 创建日期
- 创建用户
在 "Animal" class 中,我可以通过执行以下操作让 CreateDate 工作:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreateDate { get; set; }
这让我可以通过将数据库中的默认值设置为 "GetDate()" 在数据库中生成 CreateDate。
当外部调用者尝试 "set" OData 服务上的 CreateDate 字段时,它会忽略正在传递的数据。
这使它成为外部呼叫者的 "read only" 属性。
除了需要在 OData 服务器上设置 CreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Name 之外,我需要执行类似于 CreateUser 的操作。
如果我尝试私有集,则 OData 服务根本不会公开 属性。
如果我尝试设置 public,则外部呼叫者可以更改 属性.
在 "Animal" 构造函数中,我设置了内部 _CreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Name
我不知道如何在服务器端设置它。
你可以用一个空 setter 来伪造它。它将看到 public 集并在 OData 实体中生成 属性。不是最干净的解决方案,但它应该有效。
public class Animal
{
private string _createUser;
public string CreateUser
{
get { return _createUser; }
set { }
}
internal SetCreateUser(string user)
{
_createUser = user;
}
}
这是我的工作。
在模型中我有以下内容:
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
我有一个名为 "Animal" 的 class 模型。
"Animal" class 有几个属性,但让我们关注以下属性:
- 创建日期
- 创建用户
在 "Animal" class 中,我可以通过执行以下操作让 CreateDate 工作:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreateDate { get; set; }
这让我可以通过将数据库中的默认值设置为 "GetDate()" 在数据库中生成 CreateDate。
当外部调用者尝试 "set" OData 服务上的 CreateDate 字段时,它会忽略正在传递的数据。
这使它成为外部呼叫者的 "read only" 属性。
除了需要在 OData 服务器上设置 CreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Name 之外,我需要执行类似于 CreateUser 的操作。
如果我尝试私有集,则 OData 服务根本不会公开 属性。
如果我尝试设置 public,则外部呼叫者可以更改 属性.
在 "Animal" 构造函数中,我设置了内部 _CreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Name
我不知道如何在服务器端设置它。
你可以用一个空 setter 来伪造它。它将看到 public 集并在 OData 实体中生成 属性。不是最干净的解决方案,但它应该有效。
public class Animal
{
private string _createUser;
public string CreateUser
{
get { return _createUser; }
set { }
}
internal SetCreateUser(string user)
{
_createUser = user;
}
}
这是我的工作。
在模型中我有以下内容:
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