C#:AutoMapping - мога ли да създам два маппинг класa в един проект, които да се свържат с MS SQl?
Изполвах AutoMapping и Reflection, но единия ми клас се мапва правилно, а другия изкарва съобщение, че не се е мапнал.
Дали е възможно да има ограничения в маппинг класовете в един обект.
Използвам VS за C# и NHibernate за да се свържа с MsSQL:
Това ми е SessionFactory Class:
namespace ProjectTutorial01
{
public class SessionFactory
{
public static volatile ISessionFactory iSessionFactory;
public static object syncRoot = new Object();
public static ISession OpenSession
{
get
{
if (iSessionFactory==null)
{
lock (syncRoot)
{
if (iSessionFactory==null)
{
iSessionFactory = BuildSessionFactory();
}
}
}
return iSessionFactory.OpenSession();
}
}
public static ISessionFactory BuildSessionFactory()
{
try
{
string configurationString = System.Configuration.ConfigurationManager.AppSettings["çonnection_string"];
return Fluently.Configure().
Database(MsSqlConfiguration.MsSql2012.ConnectionString(configurationString)).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>()).ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
throw ex;
}
}
public static AutoPersistenceModel CreatMapping()
{
return AutoMap.Assembly(System.Reflection.Assembly.GetCallingAssembly()).
Where(testc => testc.Namespace =="ProjectTutorial01");
}
public static void BuildSchema(NHibernate.Cfg.Configuration config)
{
}
}
}
A това единия клас, който се мапва:
public class EmployeeMapping:ClassMap<Employee>
{
public EmployeeMapping()
{
Id(x => x.ID);
Map(x => x.FirstName).Not.Nullable();
Map(x => x.LastName).Not.Nullable();
Map(x => x.Email).Not.Nullable();
Map(x => x.Address).Not.Nullable();
Map(x => x.DepartmentID).Not.Nullable();
Map(x => x.Position).Not.Nullable();
Map(x => x.Salary).Not.Nullable();
Map(x => x.HireDate).Not.Nullable();
Table("Employees");
}
}
А това на класа, който не :
public class SalaryMapping : ClassMap<Salary>
{
public SalaryMapping()
{
Id(x => x.ID);
Map(x => x.TotalAmount).Not.Nullable();
Map(x => x.NetAmount).Not.Nullable();
Map(x => x.Bonus).Nullable();
Map(x => x.Other).Nullable();
Table("SalaryCalculate");
}
}
Като самите класове съдържат следното:
//Employee:
public class Employee : IPerson
{
private string email;
private DateTime hireDate;
private int departmentID;
private decimal salary;
public virtual int ID { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string Email
{
get
{
return this.Email = email;
}
set
{
if (!value.Contains("@")&&value==null)
{
throw new ArgumentException("Invalid email format!");
}
this.email = value;
}
}
public virtual string Address { get; set; }
public virtual int DepartmentID
{
get
{
return this.DepartmentID = departmentID;
}
set
{
if (value<0)
{
throw new ArgumentException("DepartmentId can not be negative!");
}
this.departmentID = value;
}
}
public virtual string Position { get; set; }
public virtual decimal Salary
{
get
{
return this.Salary = salary;
}
set
{
if (value < 0)
{
throw new ArgumentException("Salary can not be negative!");
}
this.salary = value;
}
}
public virtual DateTime HireDate
{
get
{
return this.HireDate = hireDate;
}
set
{
if (DateTime.Compare(value, DateTime.Today) == 0)
{
throw new ArgumentException("Date cannot be later than today!");
}
this.hireDate = value;
}
}
}
Класс Salary:
public class Salary
{
public virtual int ID { get; set; }
public virtual decimal TotalAmount { get; set; }
public virtual decimal NetAmount { get; set; }
public virtual decimal Bonus { get; set; }
public virtual decimal Other { get; set; }
}
Нова съм в това и се загубих вече.
Благодаря предварително!