在Azure云服务之间共享实体框架

时间:2012-11-22 00:34:41

标签: c# wcf entity-framework azure-sql-database azure-storage

目前,我有一个Windows Azure云服务项目(Service1),它将消息放入存储队列(由另一个云服务提取),然后将消息从另一个存储队列中拉出。根据此服务收到的消息,可以将对象添加到SQL Azure数据库。到目前为止,我已经添加了Queue工作,并且我创建了一个服务库,其中包含SQL数据库的Entity DataModel,到目前为止只有一个表tblCustomers。此项目具有Web角色,用于显示进入的客户,以及用于将客户发送到其他服务进行处理的辅助角色。我使用XMLSerializer将客户对象序列化为xml,并将该xml消息发送到Queue。序列化代码:

//Serialize Lead to XML
            StringBuilder sbLead = new StringBuilder();
            var serializer = new XmlSerializer(typeof(Lead));
            using (var writer = XmlWriter.Create(sbLead))
            {
                serializer.Serialize(writer, objLead);
            } 
            String xml = sbLead.ToString();

            //Create and send message
            var message = new CloudQueueMessage(xml);
            clarityQueue.AddMessage(message);

客户实体对象定义:

public partial class Customer
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public string ZipCode { get; set; }
        public string EmailAddress { get; set; }
        public string HomePhone { get; set; }
        public string CellPhone { get; set; }
        public string SSN { get; set; }
        public string DateOfBirth { get; set; }
        public string IDState { get; set; }
        public string IDNum { get; set; }
        public string Status { get; set; }
        public Nullable<System.DateTime> DateCreated { get; set; }
        public Nullable<System.DateTime> DateApproved { get; set; }
    }

现在我需要使用不同的服务(Service2)将该消息从队列中拉出来并对其进行反序列化。问题是,截至目前,Service2还不知道如何反序列化Lead,因为它不知道如何构建潜在客户。我知道我可以将服务库DLL从Service1添加到服务2中,我的问题将得到解决,但是每当实体框架发生变化时我都必须复制DLL,这可能会经常发生。我认为在两个项目中都有一个单独的实体模型是不好的做法,但我也不觉得WCF服务库是合适的,因为我需要云服务,并且WCF服务都在运行,并且在那时我不妨让整个项目成为WCF服务。那不是目标。

我的问题是,在多个不同的解决方案中使用实体对象的最佳做法是什么(Service1和Service2必须在单独的解决方案中)?我觉得这是一个有点常见的问题,但经过Azure培训套件,并在网上搜索了几个小时后,我还没有想出任何东西。

修改 为了清理,我正在寻找的是一种将实体对象从一个azure云服务发送到另一个使用存储队列的方法。即从Service1发送客户对象到StorageQueue,然后使用服务2从该StorageQueue检索相同的客户对象。服务在两个单独的解决方案中。我需要知道如何在Service1和Service2中定义Customer(这是一个由数据库中的表表示的对象)

1 个答案:

答案 0 :(得分:0)

一种方法是创建一个包含实体类的独立项目,以及其他内容(如存储库,枚举,常量等)

例如,如果您的项目名为“MyService”,那么您将拥有3个项目:MyService,MyService.FrontEnd,MyService.Worker。数据库实体代码将存在于MyService中,另外两个项目将包含该项目作为参考(不要浏览到bin文件夹并添加.dll作为参考.Visual studio允许您在同一解决方案中引用其他项目,这样你就不必复制dll或者在构建顺序不正确的情况下遇到不同步的问题)

这是我几年来在多个云项目中使用的方法。