我是breezejs的新手,正在尝试开发带有角度微风的SPA。
我有一个名为POCOObjectContext的类,该类是从基类ObjectContext继承的。我的数据库有一个名为Customer的表,还有一个POCO名为Customer的表。但是我在POCO客户上有一些额外的属性,例如不是表列的Email,SupplierName。当我从EFContextProvider中获取Metadat()时,它仅向我提供名为Customer的表中的列。但是,拥有名为客户的POCO的上下文具有我已声明的所有属性。作为BreezeJS的结果,从breeze.EntityManager创建对象时,它是根据Customer表中的列创建的,但是我需要Metadata中的这些额外属性才能从数据库获取数据或将数据保存到数据库。任何帮助将不胜感激...

这是上下文类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; }
    }


最后是微风控制器

    [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": "[email protected]"},...}


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

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

希望这可以帮助。

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

10-13 03:11