gpt4 book ai didi

breeze - 将属性添加到数据存储后如何将其添加到 EntityType?

转载 作者:行者123 更新时间:2023-12-01 10:51:57 26 4
gpt4 key购买 nike

我有一个 Entity Framework Code First 模型,其中有一个未映射的列,我仍然希望在服务器和客户端之间保留该列。该模型看起来与此类似,但具有更多属性:

public class OwnerInformation
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

[Required]
[MaxLength(16)]
public byte[] SSNEncrypted { get; set; }

[NotMapped]
[MaxLength(9)]
[MinLength(9)]
public string SSN { get; set; }
}

当 Breeze 检索元数据时,SSN 不是其中的一部分,但当通过网络发送数据时,SSN 就在那里。我想让 Breeze 通过元数据处理映射,但我希望仍然能够在客户端和服务器之间传递 SSN 并跟踪它的状态,因为我需要在将它保存到数据库之前对其进行加密。

我尝试在像这样获取元数据后添加它:

var ownerType = manager.metadataStore.getEntityType('OwnerInformation');
var sSN = new breeze.DataProperty({
name: 'sSN',
dataType: breeze.DataType.String,
isNullable: false,
maxLength: 9
});
ownerType.addProperty(sSN);

但我收到错误:'OwnerInformation:#Models' EntityType 已添加到 MetadataStore,因此不能向其添加其他属性。

也许我想多了,有更简单的方法。我乐于接受任何建议。

最佳答案

我采用了不同的方法,决定在服务器运行时更​​改元数据。我是这样做的。

public class MyContextProvider : EFContextProvider<MyContext>
{
protected override string BuildJsonMetadata()
{
string metadata = base.BuildJsonMetadata();
JObject json = JObject.Parse(metadata);
var entityOwnerInfo = json["schema"]["entityType"].Children().Where(j => (string)j["name"] == "OwnerInformation").SingleOrDefault();
var propertyArray = entityOwnerInfo["property"] as Newtonsoft.Json.Linq.JArray;

JToken ssnPropertyType = JToken.Parse(@"{
""name"": ""SSN"",
""type"": ""Edm.String"",
""fixedLength"": ""true"",
""maxLength"": ""9"",
""minLength"": ""9"",
""nullable"": ""false""}");
propertyArray.Add(ssnPropertyType);

return json.ToString();
}
}

关于breeze - 将属性添加到数据存储后如何将其添加到 EntityType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com