Linq GetTable< >返回空行

时间:2010-09-20 18:09:56

标签: linq-to-sql

我有一个非常奇怪的问题。我按照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行,列名正确,但字符串数据为空,整数数据为零。

我做错了什么?

由于

2 个答案:

答案 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或您自己的生成器。