我有一个非常奇怪的问题。我按照MVC教程。
我有一个界面:
namespace DomainModel.Abstract
{
public interface IProductsRepository
{
IQueryable<Product> Products { get; }
}
}
存储库继承该接口:
namespace DomainModel.Concrete
{
public class SqlProductsRepository : IProductsRepository
{
private Table<Product> productsTable;
public SqlProductsRepository(string connectionString)
{
try
{
productsTable = (new DataContext(connectionString)).GetTable<Product>();
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
}
public IQueryable<Product> Products
{
get { return productsTable; }
}
}
}
我的产品类看起来像这样:
namespace DomainModel.Entities
{
[Table(Name = "Products")]
public class Product
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
我的控制器看起来像这样:
namespace WebUI.Controllers
{
public class ProductsController : Controller
{
private IProductsRepository productsRepository;
public ProductsController()
{
string connString = @"Data Source=INFO_KW-HZ7YX91;Initial Catalog=SportStore;Integrated Security=True";
productsRepository = new SqlProductsRepository(connString);
}
public ViewResult List()
{
return View(productsRepository.Products.ToList());
}
}
}
我的产品表有8行。当我运行网站时,它显示8行,但它们都是空白和零。当我调试它时,我可以看到productsTable有8行,列名正确,但字符串数据为空,整数数据为零。
我做错了什么?
由于
答案 0 :(得分:0)
自从我上次使用这样的自定义属性以来已经有一段时间了,但我想你需要为你需要保留的所有属性添加[Column]
。类似的东西:
[Column]
public string Name { get; set; }
[Column]
public string Description { get; set; }
[Column]
public string Category { get; set; }
[Column]
public decimal Price { get; set; }
假设您的sql表字段名称相应地匹配属性名称。
答案 1 :(得分:0)
您没有将[Column]属性添加到您的任何列,而是您的PK。 LinqToSql的属性非常重,并且对类进行手工编码将充满风险和(最有可能)令人恐惧的异常。您应该使用sqlmetal.exe或您自己的生成器。