3

我的应用程序有产品和供应商,并且它们在“具有”关系中都有相似的项目......特别是它们有一个“收藏夹”,因此用户可以为它们添加书签。

所以我们有:

public class Product
{
    public int ProductId {get;set;}
    public int Name {get;set;}
    public List<Favorite> Favorites {get;set;}
}

public class Vendor
{
    public int VendorId {get;set;}
    public int Name {get;set;}
    public List<Favorite> Favorites {get;set;}
}

public class Favorite
{
    public int FavoriteId {get;set;}
    public string UserName {get;set;}
}

起初这不起作用,所以我补充说:

    public int? VendorId {get;set;}
    public int? ProductId {get;set;}

现在我遇到的问题是我的 Vendor.Favorites 和 Product.Favorites 始终为空。

如何绑定这些以便我可以使用这样的对象?我不让它成为一个单独的实体吗?

谢谢!

更新:我应该注意我正在使用 MVC 3 Code-first 和 POCO。

更新:解决方案:

我认为这并不理想,仍在解决我希望它如何工作的问题,因为它将添加冗余代码以添加收藏夹和评论。

public class Product
{
    public int ProductId {get;set;}
    public int Name {get;set;}
    public virtual List<Favorite> Favorites {get;set;}
}

public class Vendor
{
    public int VendorId {get;set;}
    public int Name {get;set;}
    public virtual List<Favorite> Favorites {get;set;}
}

在收藏夹类中使用原始的可为空的 int 变量使其工作,但如果我想将收藏夹类与其他对象一起使用,我将不得不使用到对象键的新映射来修改收藏夹属性。出于好奇,在正常处理这些类时,您如何管理这些对象的数据存储?我假设你在 DAL 处理它?

4

3 回答 3

1

您可以使用继承,创建一个仅包含收藏夹的基类,然后基于该基类派生其他信息的类。这建立了“是”关系

前任。

public class baseClass
{
 public list<Favorite> Favorites { get; set;}
}
public class Product : base
{
 public int ProductID { get; set; }
 public string Name { get; set; }
}

然后一个产品对象将具有所有 3 个属性。

于 2012-08-01T19:17:52.357 回答
0

基于您使用的是 EF 4.1 的假设:

你的模型看起来不错,除非我会改变

    public int? VendorId {get;set;}
    public int? ProductId {get;set;}

    public virtual Vendor VendorId {get;set;}
    public virtual Product ProductId {get;set;}

然后你的 FK 关系应该已经设置好了。根据我对 EF 的理解,List<Favorite>它旨在建立一种关系,实际上并没有填充。您必须自己填充它,方法是调用.Include()上下文或引用 EF 在数据库中创建的实际 FK,在您的情况下是VendorId_FavoriteIdProductId_FavoriteId

于 2012-08-01T19:48:17.790 回答
0

我会保留一个属性来存储 ID(VendorID 或 ProductId)并使用另一个属性来告诉我它是什么类型(VendorProduct

public class Favorite
{
    public int FavoriteId {get;set;}
    public string UserName {get;set;}
    public int ItemID { set;get;}    //can use a better generic name
    public FavoriteType Type { set;get;}
}

我有一个Enum类型

public enum FavoriteType
{
    Vendor, 
    Product
}

并确保在访问它们之前初始化子属性/对它们应用方法,这样它就不会抛出空引用异常!。你可以自己做构造函数

public class Product
{
    public int ProductId {get;set;}
    public int Name {get;set;}
    public List<Favorite> Favorites {get;set;}

  public Product()
  {
      if(Favourites==null)
          Favorites=new List<Favorite>();
  }
}
于 2012-08-01T19:23:44.867 回答