使用POCO和objectcontext从EFcontextprovider中定制元数据
本文关键字:元数据 EFcontextprovider POCO objectcontext 使用 | 更新日期: 2023-09-27 18:08:41
我是breezejs的新手,并试图开发一个有角微风的SPA。
我有一个名为POCOObjectContext的类,它继承自基类ObjectContext。我的数据库有一个名为Customer的表,还有一个名为Customer的POCO。但是我在POCO Customer上有一些额外的属性,如Email, SupplierName,它们不是表列。当我从EFContextProvider获取Metadat()时,它只向我提供了名为Customer的表中的列。但是保存名为Customer的POCO的上下文具有我声明的所有属性。因此在BreezeJS中,当创建对象从微风。EntityManager,它是根据客户表中的列创建的,但我需要这些额外的属性在元数据中获取和保存数据从/到我的数据库。如有任何帮助,我将不胜感激。
This is Context Class POCOObjectContext (tmpDataBaseEntities is 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; }
}
}
这是持有额外属性SupplierName和Email的POCO Customer
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; }
}
最后的微风控制器
[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.
}
}
您已经发现,发送给客户机的元数据定义中不包括服务器上的自定义未映射属性。但是,您可以这样扩展客户端的Customer定义,
//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实体的信息