Когда я проверяю CentOS 7, только текстовый режим, в VirtualBox я не вижу X после выполнения lsof / dev / input / event2 (клавиатура), но моя клавиатура все еще работает
blockquote>Это потому, что вы используете виртуальную консоль , а затем одно из
/dev/ttyN
устройств. Они напрямую связаны с подсистемой входных событий Linux внутри самого ядра (с помощью модуляvt
); по существу, все клавиатурные устройства действуют как входы для активного в данный момент виртуального терминала.Сам X использует виртуальную консоль, просто чтобы ядро могло переключаться между ней и любыми текстовыми виртуальными консолями.
Как насчет
blockquote>tty_open()
?Если вы запустите
sudo lsof /dev/tty[0-9]
, вы увидите, какие процессы обращаются к виртуальной консоли.Процессы с
getty
в названии являются теми, которые предоставляют терминалы входа. (Те, которые используются с последовательными терминалами, очень похожи; на самом деле, многие программы getty могут нормально обрабатывать как виртуальные консоли, так и последовательные терминалы.) Когда вы входите в систему, этот getty запускаетlogin
(программа!), Которая, в свою очередь, запускает оболочку по умолчанию, определенную для этого пользователя (см.getent passwd username
; это последнее поле, и оно должно быть тем, которое указано в/etc/shells
, чтобы быть разрешенным).Само ядро поддерживает переключение на другую виртуальную консоль с помощью Ctrl kbd> + Alt kbd> + Fn kbd> (F1 для tty1, F2 для tty2 и скоро). Если вы используете подходящие графические драйверы, вы даже можете переключаться между Xorg и виртуальными консолями. (Обычно Xorg запускается на tty6 или tty7, но это зависит от дистрибутива.) Ctrl kbd> + Alt kbd> + ← kbd> и > Ctrl kbd> + Alt kbd> + → kbd> также обычно можно использовать для переключения на предыдущую или следующую виртуальную консоль.
Используйте частичную реализацию класса для Книги и добавьте соответствующие методы для категорий и их свойств. Имейте фронтенд свойств свойство Books_Categories (можно заставить это иметь частную видимость для принуждения реализации через свойство Categories).
public partial class Books
{
public IEnumerable<string> CategoryNames
{
get
{
return this.Books_Categories
.Select( bc => bc.Category.category.Trim() );
}
}
public void AddCategory( Category category )
{
this.Books_Categories.Add( new Book_Category
{
Category = category,
Book = this
} );
}
public void RemoveCategory( Category category )
{
var bc = this.Book_Categories
.Where( c => c.Category == category )
.SingleOrDefault();
this.Books_Categories.Remove( bc );
}
}
Очевидно, необходимо будет добавить некоторую ошибку/границы при проверке, и т.д. но Вы получаете идею.
Я предоставлю Вам, это не идеально, но по крайней мере у Вас есть гибкость, чтобы определить, как она работает.
Многие ко многим отображениям явно поддерживаются в Платформе Объекта, но не в LINQ к SQL. Можно также использовать сторонний ORMs, такой как NHibernate.
Я не думаю, что Ваш ожидаемый результат поддерживается в Linq к Sql.
То, что Вы делаете, может чувствовать себя неправильным, но я думаю, что это - один способ работать вокруг того ограничения L2S.
Человек, я действительно добрался для вхождения в направляющие...
Что вы можете сделать, если хотите создать книгу и напрямую хотите добавить к ней категорию: на ваш взгляд:
<p>
<label for="CategorySelect">Category:</label>
<%= Html.ListBox("CategorySelect") %>
<%= Html.ValidationMessage("CategorySelect", "*")%>
</p>
в вашем контроллере книг:
public ActionResult New()
{
var data = _entities.Categories.ToList();
ViewData["CategorySelect"] = new MultiSelectList(data, "Id", "Name");
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult New([Bind(Exclude = "Id")] Book Booknew)
{
IEnumerable<int> selectedCategories = Request["CategorySelect"].Split(new Char[] { ',' }).Select(idStr => int.Parse(idStr));
if (!ModelState.IsValid)
return View();
try {
foreach(var item in selectedCategories){
BooksCategories bc = new BooksCategories();
bc.Book = Booknew;
bc.CategoryId = item;
_entities.BooksCategories.InsertOnSubmit(bc);
}
_entities.Books.InsertOnSubmit(Booknew);
_entities.SubmitChanges();