gpt4 book ai didi

c# - 使用 POCO 和 ObjectCotext 来自 EFcontextprovider 的自定义元数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:56 25 4
gpt4 key购买 nike

我是 breezejs 的新手,正在尝试使用 angular-breeze 开发 SPA。
我有一个名为 POCOObjectContext 的类,它继承自基类 ObjectContext。我的数据库有一个名为 Customer 的表,我还有一个名为 Customer 的 POCO。但是我在 POCO 客户上有一些额外的属性,比如电子邮件、供应商名称,它们不是表列。当我从 EFContextProvider 获取 Metadat() 时,它只为我提供名为 Customer 的表中的列。但是保存名为 Customer 的 POCO 的上下文具有我声明的所有属性。结果在 BreezeJS 中,当从 breeze.EntityManager 创建对象时,它是根据客户表中的列创建的,但我需要元数据中的这些额外属性来从我的数据库获取数据或将数据保存到我的数据库。任何帮助将不胜感激...

这是上下文类 POCOObjectContext(tmpDataBaseEntities 是 ConnectionString)

    public class POCOObjectContext : ObjectContext
{
private ObjectSet<Customer> customers;

public POCOObjectContext()
: base("name=tmpDataBaseEntities", "tmpDataBaseEntities")
{
customers = CreateObjectSet<Customer>();
}

public ObjectSet<Customer> Customers
{
get { return customers; }
}
}

这是 POCO 客户,它拥有额外的属性 SupplierName 和 Email

    public class Customer
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string SupplierID { get; set; }

//Extra Properties not in the Customer Table as Columns
public string SupplierName { get; set; }
public string Email { get; set; }
}

最后是 Breeze Controller

    [BreezeController]
public class ReceiveServiceController : ApiController
{
EFContextProvider<POCOObjectContext> _pocoContext = new EFContextProvider<POCOObjectContext>();

ReceiveDal _rcvDal = new ReceiveDal();

[HttpGet]
public string Metadata()
{
var t = _pocoContext.Metadata();
return t; // It holds the properties info that match with POCO and Database Table.
}
}

最佳答案

正如您所发现的,服务器上的自定义未映射属性不包含在发送给客户端的元数据定义中。但是,您可以通过执行以下操作来扩展客户的客户定义,

//Assuming you have camelCase naming convention enabled
function Customer() {
this.supplierName = '';
this.email = '';
}

entityManager.metadataStore.registerEntityTypeCtor('Customer', Customer);

现在,当您调用 saveChanges 时,Breeze 将在负载中包含上述自定义属性。

{"Id": 42, "Name": "Customer Name","__unmapped":{"supplierName":"Supplier Name", "email": "supplier@supplier.com"},...}

然后,在服务器上,您可以检查和解析 JObject 负载以检索未映射的属性。

您可以在 http://www.breezejs.com/documentation/extending-entities 阅读有关在客户端上扩展 Breeze 实体的更多信息

希望这对您有所帮助。

关于c# - 使用 POCO 和 ObjectCotext 来自 EFcontextprovider 的自定义元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24239667/

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