2011-04-01 40 views
0

我在想什麼?POCO LinqToSQL錯誤:System.InvalidOperationException:錯誤的存儲屬性:

City.cs


[Table(Name = "City")] 
    public class City 
    { 
     [Column(IsDbGenerated = true, IsPrimaryKey = true)] 
     public int CityId { get; set; } 

     [Column(CanBeNull = false)] 
     public string CityName { get; set; } 


     private EntitySet<CityLocality> _cityLocalities; 

     [Association(Storage = "_CityLocality", OtherKey = "CityId", Name = "City_CityLocality")] 
     public EntitySet<CityLocality> CitiyLocalities 
     { 
      get { return _cityLocalities; } 
      set { _cityLocalities.Assign(value);} 
     } 

CityLocality

[Table(Name = "CityLocality")] 
    public class CityLocality 
    { 
     [Column(IsPrimaryKey = true, IsDbGenerated = true)] 
     public int LocalityId { get; set; } 

     [Column(CanBeNull = false)] 
     public string LocalityName { get; set; } 

     [Association(Name = "FK_CityLocation_City", Storage = "_City", ThisKey = "CityId", OtherKey = "CityId", IsForeignKey = true)] 
     [Column(CanBeNull = false)] 
     public int CityId { get; set; } 


    } 

SqlCityRepository


public class SqlCityRepository : ICityRepository 
    { 
     private Table<City> _citys; 

     public SqlCityRepository(string connectionString) 
     { 
      _citys = (new DataContext(connectionString)).GetTable<City>(); 

     } 

     public IQueryable<City> Cities 
     { 
      get { return _citys; } 
     } 

     public void Add(City city) 
     { 
      if(city.CityId == 0) 
      { 
       _citys.InsertOnSubmit(city); 
      } 
      else 
      { 
       _citys.Attach(city); 
       _citys.Context.Refresh(RefreshMode.KeepCurrentValues,city); 
      } 
      _citys.Context.SubmitChanges(); 
     } 

     public City GetById(int cityId) 
     { 
      return (from c in _citys where c.CityId == cityId select c).FirstOrDefault(); 
     } 
    } 

的TestFixture


[Test] 
     public void CityAddFunctionalityShouldWork() 
     { 
      var repository = new SqlCityRepository(_connectionSting); 
      var city = new City(); 
      city.CityName = "BagChenDil"; 


      using(var scope = new TransactionScope()) 
      { 
       repository.Add(city); 
       var banChenDil = (from c in repository.Cities select c).FirstOrDefault(); 

       Assert.AreEqual(banChenDil.CityName, city.CityName); 

       scope.Dispose(); 
      } 

     } 

錯誤消息:

System.InvalidOperationException:壞存儲屬性: '_CityLocality' 上構件 'Entities.Location.City.CitiyLocalities' 。

回答

0

有幾個問題與此。

1)通知。

private EntitySet<CityLocality> _cityLocalities; 

這應該是。

private EntitySet<CityLocality> _cityLocalities = new EntitySet<CityLocality>(); 

2)[Association(Storage = "_CityLocality", 本應有的水平。

[Association(Storage = "_cityLocalities", 

3)經過了DB模式,並發現有列可爲空,以防萬一我改變他們可爲空不空。

和事情工作正常。

親切的問候 Vinay。