сущность / риа включают много ко многим - PullRequest
2 голосов
/ 22 марта 2011

хорошо, я знаю, что об этом спрашивают миллион раз, но я все еще не могу найти рабочее решение.Надеюсь, я просто что-то упустил.Используя сущность с silverlight, через RIA у меня есть структура таблицы «многие ко многим» в моей БД.

[System] - [SystemUsers] - [Users] 

В таблице мостов есть только два идентификатора, поэтому естественные сущности не включают их в модель.

Я знаю, что RIA не любит много-много отношений, поэтому я 'мы добавили теги атрибутов ассоциации в коллекцию и теперь, по крайней мере, можем видеть свойство коллекции на стороне клиента.

[Association("DMSSystem_Users", "DMSSystemId", "UserId")]
[Include]
[Composition]
public EntityCollection<Users> Users { get; set; }

В моей доменной службе я пытался включить пользователей:

public IQueryable<DMSSystem> GetSystem()
{
    return this.ObjectContext.DMSSystem.Include("Users");
}

Я никогда не получаю пользователей на стороне клиента Есть ли что-то еще, чего мне не хватает, чтобы заставить пользователей быть обманутыми и отправленными клиенту?

Ответы [ 3 ]

1 голос
/ 22 марта 2011

У RIA с EF неприязнь к отношениям M: M. Что вам нужно сделать, это помочь RIA увидеть M: M как два отношения 1: M.

В таблицу ссылок добавьте дополнительный столбец (я добавляю что-то вроде IgnoreThisField) и сделайте его битовым.

Когда EF видит эту таблицу, она теперь будет интерпретировать ее по-разному, позволяя вам обрабатывать отношения M: M.

1 голос
/ 22 марта 2011

Я не знаю Entity Framework, но вот как это работает в RIA с NHibernate ...

Моя модель Users - UserRoleGrant - Role. Вам придется переводить свою модель в своей голове.

Важными частями следующего кода являются ... убедитесь, что у вас есть правильные имена ассоциаций в вашей модели, убедитесь, что у вас установлены правильные имена свойств, установленные в ваших ассоциациях, установите свойство UserID в UserRoleAssociation при установке его свойства User , Если вы не установите этот идентификатор, у вас не будет доступа к связанному объекту через свойство ассоциации.

Вам, вероятно, также не нужен атрибут Composition, но вы можете прочитать это, чтобы узнать ... http://ria.feedables.com/story/4583193/Composition-Support-in-RIA-Services

public class User 
{
    ...snip...
    [Include]
    [Association("UserToRoleAssociation", "Id", "UserId", IsForeignKey = false)]
    public virtual IList<UserRoleAssociation> RoleGrants
    { 
        get
        {
            return this.roleGrants;
        }
    }
}

public class UserRoleAssociation 
{
    /// <summary>
    /// Backing field for User
    /// </summary>
    private User user;

    /// <summary>
    /// Gets or sets the id.
    /// </summary>
    /// <value>The relationships id.</value>
    [Key]
    public virtual long Id { get; set; }

    /// <summary>
    /// Gets or sets the user id.
    /// </summary>
    /// <value>The assigned users id.</value>
    public virtual long UserId { get; set; }

    /// <summary>
    /// Gets or sets the user.
    /// [Association("UserRoleGrants", "UserId", "Id", IsForeignKey = false)]
    /// </summary>
    /// <value>The user who has been granted this operation.</value>
    [Include]
    [Association("UserToRoleAssociation", "UserId", "Id", IsForeignKey = true)]
    public virtual User User
    {
        get
        {
            return this.user;
        }

        set
        {
            this.user = value;

            if (value != null)
            {
                this.UserId = value.Id;
            }
        }
    }
}
0 голосов
/ 19 октября 2011

Просто наткнулся на это: http://m2m4ria.codeplex.com/

Это требует некоторой настройки, но предоставляет клиенту представление, которое решает всю проблему многие-ко-многим, без изменения вашей базы данных или модели сущностей.Я нашел это очень полезным.

...