, если explode используется вместе с foreach для создания новой строки, вы можете имитировать взрыв, используя цикл while следующим образом:
CREATE FUNCTION explode_and_loop(sep VARCHAR(),inputstring VARCHAR()) RETURNS VARCHAR()
BEGIN
DECLARE part,returnstring VARCHAR();
DECLARE cnt,partsCnt INT();
SET returnstring = '';
SET partsCnt = ((LENGTH(inputstring ) - LENGTH(REPLACE(inputstring,sep,''))) DIV LENGTH(sep);
SET cnt = 0;
WHILE cnt <= partsCnt DO
SET cnt = cnt + 1;
SET part = SUBSTRING_INDEX(SUBSTRING_INDEX(inputstring ,sep,cnt),sep,-1);
-- DO SOMETHING with the part eg make html:
SET returnstring = CONCAT(returnstring,'<li>',part,'</li>')
END WHILE;
RETURN returnstring;
END
этот пример вернет html-список частей. (требуются переменные legths должны быть добавлены)
modelBuilder.Entity<Account>()
.HasMany(a => a.Products)
.WithMany()
.Map(x =>
{
x.MapLeftKey("Account_Id");
x.MapRightKey("Product_Id");
x.ToTable("AccountProducts");
});
public AccountProductsMap()
{
this.ToTable("AccountProducts");
this.HasKey(cr => cr.Id);
this.HasMany(cr => cr.Account)
.WithMany(c => c.Products)
.Map(m => m.ToTable("AccountProducts_Mapping"));
}
Сначала код создает таблицы в правильном реляционном порядке. Когда
У одной учетной записи может быть много продуктов.
blockquote>Таблица продуктов должна хранить ключ для своей учетной записи, как это сейчас происходит.
То, что вы пытаетесь увидеть в db, - это отношения «многие ко многим», а не одно. Если вы хотите добиться этого с помощью кода сначала, вы должны перепроектировать свои сущности
class Product { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Account> Accounts { get; set; } } class Account { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } }
. В этом случае у одного продукта может быть много учетных записей, а одна учетная запись может иметь много продуктов.
Что предлагает EF, это отношение «один ко многим».
Одна учетная запись может иметь много продуктов, то есть каждый продукт имеет Account_Id
. Если вы хотите, чтобы многие из многих (и создать промежуточную таблицу), следует работать
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
class Account
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
p => p.Accounts
внутри.WithMany()
. Не делая этого, это создавало странное свойство внутри Учетных записей. – Chris 19 February 2014 в 03:26public virtual ICollection<Product> Products { get; set; }
удаляет дубликаты. Так что, если в(1, 1)
есть 2 строки с(Account_ID, Product_ID)
, мойProducts
collection.ToList () содержит только одну запись с идентификатором 1 – mmcrae 21 December 2015 в 02:40