Опубликован: 30.05.2011 | Уровень: специалист | Доступ: платный
Самостоятельная работа 4:
Хранилище данных с реляционной структурой
Мы не видим необходимости в создании нового VS - проекта, поэтому просто изменим WorkerRole.cs проекта, созданного в рамках предыдущей практической работы. А именно, метод Run, чей листинг представлен ниже:
CloudStorageAccount.SetConfigurationSettingPublisher(
(configName, configSettingPublisher) =>
{
var connectionString =
RoleEnvironment.GetConfigurationSettingValue(configName);
configSettingPublisher(connectionString);
}
);
CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
//создание таблицы Windows Azure Table
CloudTableClient _tc = null;
_tc = account.CreateCloudTableClient();
_tc.CreateTableIfNotExist("Relational");
Context context = new Context(account.TableEndpoint, account.Credentials);
//определение параметров подключения к БД, измените строку подключения
//соответствующим образом, для соединения с вашим sql - сервером
SqlConnection conn = new SqlConnection("Data Source=saigon\\sqlexpress;
Initial Catalog=azureexample; Integrated Security=true;");
//импорт данных из таблицы Address
//указываем команду для чтения данных из базы
SqlCommand cmd = new SqlCommand("SELECT * FROM Address", conn);
conn.Open();
SqlDataReader adr = cmd.ExecuteReader();
while (adr.Read())
{
//в параметрах метода AddObject указывает имя таблицы и определяем новую сущность класс //Address
context.AddObject("Relational", new Address
{
PartitionKey = "Address",
RowKey = adr["AddresID"].ToString(),
country = adr["Country"].ToString(),
city = adr["City"].ToString(),
street = adr["Street"].ToString(),
house = Convert.ToInt32(adr["House"].ToString())
});
context.SaveChanges();
}
adr.Close();
//импорт данных из таблицы Firm
cmd.CommandText = "SELECT * FROM Firm";
SqlDataReader frm = cmd.ExecuteReader();
while (frm.Read())
{
context.AddObject("Relational", new Firm
{
PartitionKey = "Firm",
RowKey = frm["FirmID"].ToString(),
nameof = frm["NameOf"].ToString(),
telephone = frm["Telephone"].ToString(),
email = frm["Email"].ToString(),
adresskey = Convert.ToInt32(frm["AddressKey"].ToString())
});
context.SaveChanges();
}
frm.Close();
//импорт данных из таблицы Employee
cmd.CommandText = "SELECT * FROM Employee";
SqlDataReader emp = cmd.ExecuteReader();
while (emp.Read())
{
context.AddObject("Relational", new Employee
{
PartitionKey = "Employee",
RowKey = emp["EmployeeID"].ToString(),
firstname = emp["FirstName"].ToString(),
lastname = emp["LastName"].ToString(),
telephone = emp["Telephone"].ToString(),
firmkey = Convert.ToInt32(emp["FirmKey"].ToString())
});
context.SaveChanges();
}
emp.Close();
conn.Close();Кроме того, нам необходимо создать классы - соответствующие сущностям реляционной базы данных, а также класс - контекст.
Класс Address.cs
class Address: TableServiceEntity
{
public String country { get; set; }
public String city { get; set; }
public String street { get; set; }
public int house { get; set; }
}Класс Firm.cs
class Firm: TableServiceEntity
{
public String nameof { get; set; }
public String telephone { get; set; }
public String email { get; set; }
public int adresskey { get; set; }
}Класс Employee.cs
class Employee: TableServiceEntity
{
public String firstname { get; set; }
public String lastname { get; set; }
public String telephone { get; set;}
public int firmkey { get; set; }
}Класс Context.cs
class Context: TableServiceContext
{
public IQueryable<Address> ContactData
{
get
{
return this.CreateQuery<Address>("Address");
}
}
public Context(Uri baseAddress, StorageCredentials credentials) :
base(baseAddress.AbsoluteUri, credentials) { }
}Запустите приложение и дождитесь конца его выполнения. В обозревателе серверов раскройте вкладку "Хранилище Windows Azure", затем обновите вкладку "Таблицы" и раскройте ее. Как вы можете видеть, появилась таблица "Relational".
Если вы решите ее просмотреть, то увидите, что данные из реляционной БД успешно перенесены в таблицу.

