Dapper选择并插入多对多

时间:2013-10-12 19:40:45

标签: c# sql entity-relationship dapper

下面解决了详细信息!!!!!!我有一个使用MSSQL和Dapper ORM的mvc项目。我的问题是;如何选择多对多关系中的实体两个表?例如我的下面的课程;

第一批产品;

#region Primitive Properties
    [Key]
    public Guid ProductID
    {
        get;
        set;
    }

    public Nullable<int> CategoryID { get; set; }
    public Nullable<int> BrandID { get; set; }
    public  string ProductName
    {
        get;
        set;
    }.............Other Details

对于许多人而言;

public virtual ICollection<Image> Images { get; set; }
public virtual ICollection<Order> Orders { get; set; }
public virtual ICollection<Rating> Ratings { get; set; }...... Other Details

和其他表格图片;

[Key]
    public  int ImageID
    {
        get;
        set;
    }............ Other Details

和许多人一样

public virtual ICollection<Product> Products { get; set; }

和我的表ProductToImages

FK ImageID FK ProductID

选择带图像的产品我的短小精悍的代码如下;

 public virtual IEnumerable<Product> GetProductForView()
    {
        try
        {
            using (var cn = Connection)
            {
                const string sql = "SELECT Products.*,Images.* FROM Products JOIN ProductToImages ON Products.ProductID = ProductToImages.ProductID JOIN Images ON Images.ImageID = ProductToImages.ImageID ";
                var lookup = new Dictionary<Guid, Product>();
                cn.Open();
                var product = cn.Query<Product,Image,Product>(sql, (p,i) =>
                {
                    Product pp;
                    if (!lookup.TryGetValue(p.ProductID, out pp))
                    {
                        lookup.Add(p.ProductID, pp = p);
                    }

                    if (pp.Images == null)
                    {
                        pp.Images = new List<Image> { i };
                    }
                    return pp;

                }, commandType: CommandType.Text, commandTimeout: 5, splitOn: "ProductID,ImageID").ToList();
                cn.Close();
                return product;

            }
        }
        catch (Exception ex)
        {

            var message = ex.InnerException;
            const string subject = "Error From Product Rep. / GetProductName(string productName)";
            var mail = new MailSend();
            mail.MailGonder(subject, message.ToString(), "******", "******", "******");
            return null;
        }

以下错误消息;

  

使用多映射API时,如果您拥有Id以外的密钥,请确保设置splitOn参数

那么如何选择和插入与dapper的多对多关系????谢谢你的回复。

由Tuple解决。谢谢你的一切

0 个答案:

没有答案