используя дозвуковой с vb.net - PullRequest
       5

используя дозвуковой с vb.net

0 голосов
/ 04 октября 2010

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

Мне не ясно, могу ли я использовать его в VB.Я видел пару постов, которые предполагают, что они сделали, но на сайте это определенно показывает C #.

Могу ли я использовать SubSonic с VB.NET?

1 Ответ

4 голосов
/ 04 октября 2010

Сам SubSonic полностью написан на C #, но генерация кода для ваших таблиц и представлений также доступна для vb.net.

Для SubSonic3 вам необходимо добавить VB-шаблоны в ваш проект

http://github.com/subsonic/SubSonic-3.0-Templates/tree/master//SubSonic.TemplatesVB/

Для SubSonic2 вы должны добавить параметр /lang vb в subcommander (sonic.exe) Тем не менее, я бы лично остановился на генерации кода на C #, так как он более проверен из-за большей пользовательской базы, я полагаю.

Вы можете добавить еще один проект библиотеки классов c # в свое решение (в любом случае вы должны создать отдельный проект для вашего DAL) и связать его в своем проекте на сайте vb.net. Я тоже запускаю такой вид установки.

В этом сценарии есть 3 недостатка:

1) Вы не можете создавать решения со смешанными проектами на языках программирования с помощью Visual Studio Express Edition.

2) если вы не хотите расширять сгенерированные классы (с частичными классами, а не наследованием), вы должны сделать это в c #, так как частичные классы должны быть в одном проекте.

3) Если вы что-то измените в своем проекте на c #, ошибки времени разработки будут показаны только после следующей компиляции (например, если вы измените имя столбца, которое используется в вашем проекте vb, и заново создадите DAL, в окне ошибок будет показана только эта ошибка если вы компилируете свое решение / проект c # один раз.

В конце дня я бы посоветовал вам придерживаться c #, так как гораздо интереснее кодировать с помощью subsonic (linq, lamdas, ...). Но если вы не хотите, вы должны быть в порядке с VB.

Некоторые примеры, которые проще достичь в c #

// in vb.net you have to add the _ modifier at the end of each line
// one thing that gets annoying for large linq queries or 
// when using subsonics query tool
var query = from p in products.All()
            join c in prodctcategories.All() on p.categoryId equals c.id
            where c.categoryName == "Food"
            select new {p.productName, c.categoryName}


// from the subsonic3 docs:
//find a single product by ID
var product = Product.SingleOrDefault(x => x.ProductID == 1);

//get a list of products based on some criteria
var products = Product.Find(x => x.ProductID <= 10);


// You can write lamdas in vb.net but they don't look as nice as in c#
Dim product = Product.SingleOrDefault(Function(x) x.ProductID = 1)
Dim products = Product.Find(Function(x) x.ProductID <= 10)

// If you have to write InlineQueries (subsonic's backdoor) you can do this
// with c#. For vb.net you would need a) internal backing fields for the
// poco class ProductResult and you would again need the concat 
// the query string with underscore, Environment.NewLine and &
public class ProductResult
{
    public int ProductId {get;set;}
    public string ProductName {get;set;}
}

public List<ProductResult> GetProducts()
{
    string query = @"SELECT p.productid, p.name as productname
     FROM product p
     INNER JOIN productcategories pc
     WHERE pc.categoryname = 'Food'
     ORDER BY p.productid ASC";

    var result = new CodingHorror(query).ExecuteTypedList<ProductResult>();
}
...