|
namespace EntityFrameworkXmlDemo |
|
{ |
|
internal class Program |
|
{ |
|
public static void Main(string[] args) |
|
{ |
|
Console.WriteLine("Welcome"); |
|
|
|
bool retrieve = true; |
|
var context = new SampleContext("connection string here"); |
|
|
|
if (retrieve) |
|
{ |
|
var employee = context.Employees.FirstOrDefault(e => e.Id == 1); |
|
var addresses = employee.Addresses; |
|
} |
|
else |
|
{ |
|
var employee = new Employee() |
|
{ |
|
Name = "Fanstastic" |
|
}; |
|
|
|
employee.Addresses.Add(new Address() |
|
{ |
|
Name = "Newyork", |
|
Zip = 1234 |
|
}); |
|
|
|
employee.Addresses.Add(new Address() |
|
{ |
|
Name = "California", |
|
Zip = 7658 |
|
}); |
|
|
|
employee.SerializeAddress(); |
|
|
|
|
|
context.Employees.Add(employee); |
|
context.SaveChanges(); |
|
} |
|
|
|
|
|
Console.ReadKey(); |
|
} |
|
} |
|
|
|
public class SampleContext : DbContext |
|
{ |
|
public DbSet<Employee> Employees { get; set; } |
|
public SampleContext(string connectionString) : base(connectionString) |
|
{ |
|
|
|
} |
|
|
|
protected override void OnModelCreating(DbModelBuilder modelBuilder) |
|
{ |
|
modelBuilder.Configurations.Add(new EmployeeMapping()); |
|
|
|
base.OnModelCreating(modelBuilder); |
|
} |
|
} |
|
public class EmployeeMapping : EntityTypeConfiguration<Employee> |
|
{ |
|
public EmployeeMapping() |
|
{ |
|
this.ToTable("Employees"); |
|
this.HasKey(d => d.Id); |
|
|
|
this.Property(d => d.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); |
|
|
|
this.Property(d => d.Name); |
|
this.Property(d => d.Address).HasColumnType("xml"); |
|
|
|
this.Ignore(d => d.Addresses); |
|
} |
|
} |
|
|
|
public class Employee |
|
{ |
|
private IList<Address> _addresses; |
|
|
|
public int Id { get; set; } |
|
public string Name { get; set; } |
|
public string Address { get; set; } |
|
|
|
public IList<Address> Addresses |
|
{ |
|
get |
|
{ |
|
_addresses = DeSerializeAddress(); |
|
return _addresses; |
|
} |
|
set => _addresses = value; |
|
} |
|
|
|
public void SerializeAddress() |
|
{ |
|
var serializer = new XmlSerializer(typeof(List<Address>)); |
|
var stringWriter = new StringWriter(); |
|
|
|
serializer.Serialize(stringWriter, _addresses); |
|
|
|
Address = stringWriter.ToString(); |
|
|
|
} |
|
public IList<Address> DeSerializeAddress() |
|
{ |
|
if (!string.IsNullOrEmpty(Address)) |
|
{ |
|
var serializer = new XmlSerializer(typeof(List<Address>)); |
|
var stringReader = new StringReader(Address); |
|
|
|
return (IList<Address>)serializer.Deserialize(stringReader); |
|
} |
|
|
|
return _addresses; |
|
} |
|
|
|
public Employee() |
|
{ |
|
_addresses = new List<Address>(); |
|
} |
|
} |
|
|
|
public class Address |
|
{ |
|
public string Name { get; set; } |
|
public int Zip { get; set; } |
|
} |
|
} |